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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值