天天看点

蓝桥杯——算法训练——天数计算

蓝桥杯——算法训练——天数计算

这道题思路简单,但是由于输入格式被卡在 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。最后发现是输入格式的问题,真是令人无语。

继续阅读