蓝桥杯——算法训练——天数计算
这道题思路简单,但是由于输入格式被卡在 83 83 83 分,无语之后写篇博客发泄一下。
——————————————————————————————————————
资源限制
时间限制: 1.0 s 1.0s 1.0s 内存限制: 256.0 M B 256.0MB 256.0MB
问题描述
编写函数求某年某月某日(**** ** **)是这一年的第几天 。提示:要考虑闰年,闰年的 2 2 2 月是 29 29 29 天(闰年的条件:是 4 4 4 的倍数但不是 100 100 100 的倍数,或者是 400 400 400 的倍数)。编写主函数,输入年月日,测试该函数并输出结果。
输入格式
按“ y y y y m m d d yyyy \space\space mm\space\space dd yyyy mm dd"的格式输入年月日
输出格式
输出一个整数形式的计算结果
样例输入
1990 1990 1990 5 \space5 5 10 \space10 10
样例输出
130 130 130
数据规模和约定
根据实际输入合法的日期
——————————————————————————————————————
思路分析:这道题没有什么复杂的地方,先打一张月份表,再借助 f o r for for 循环遍历月份依次叠加,最后再根据是否是闰年修正答案即可。直接看代码:
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int a[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool is_leap_year(int y){
bool flag = false;
if(y % 4 == 0 && y % 100 != 0) flag = true;
else if(y % 400 == 0) flag = true;
return flag;
}
int count_days(int y, int m, int d){
int ans = 0;
for(int i=0; i<m; i++) ans += a[i];
ans += d;
if(is_leap_year(y) && m > 2) ans += 1;
return ans;
}
int main(){
// string date;
// getline(cin, date);
// int l = date.length();
// int y = 0, m = 0, d = 0, k = 1, t = l - 1;
// while(date[t] != ' '){
// d += (date[t] - 48) * k;
// k *= 10;
// t--;
// }
// k = 1;
// t--;
// while(date[t] != ' '){
// m += (date[t] - 48) * k;
// k *= 10;
// t--;
// }
// k = 1;
// t--;
// while(t >= 0){
// y += (date[t] - 48) * k;
// k *= 10;
// t--;
// }
int y, m ,d;
cin>>y>>m>>d;
cout<<count_days(y, m, d)<<endl;
return 0;
}
发泄写在最后,输入格式明明就是一个字符串,被注释掉的部分是我一开始编写的代码,用来输入带空格字符串,再将其转换为年月日数据,但是 o j oj oj 测评后却给出 83 83 83 分,而且无论怎么修改都卡在了 83 83 83。最后发现是输入格式的问题,真是令人无语。