目录
补充知识点
1160: 6001 第几天?
1161: 6002 时间格式转换
1162: 6003 星期几?
1163: 6004 18岁生日、
闰年的判断方法:
能被四整除但是不能一百整除或者能被400整除
例题:
题目描述
经常会有人问你怎么判断闰年,其实很简单,就是如果年份能被4整除但是不能被100整除,或者是能被400整除,那么就是闰年,否则就不是。
输入
输入一个正整数year(1 <=year <=3000)。
输出
如果是闰年,输出YES,否则输出NO。
样例输入 复制
200
样例输出 复制
NO
#include
using namespace std;
int run(int n)
{
if((n%4==0&&n%100!=0)||(n%400==0))
return 1;
else
return 0;
}
int main()
{
int y;
scanf("%d",&y);
if(run(y)==1)
cout<<"YES";
else
cout<<"NO";
return 0;
}
月份的判断
1 3 5 7 8 10 12月为31天 其余(除了2月)均为30天
如果是闰年是29天 平年是28天
题目描述
给定一个日期,输出这个日期是该年的第几天。
输入
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见输入样例,另外,可以向你确保所有的输入数据是合法的。
输出
对于每组输入数据,输出一行,表示该日期是该年的第几天。
样例输入 复制
1985/1/20
2006/3/12
样例输出 复制
20
71
来源/分类
#include
using namespace std;
int run(int n)
{
if((n%400==0)||(n%4==0&&n%100!=0))
return 1;
else
return 0;
}
int main()
{
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,d;
while(scanf("%d/%d/%d",&y,&m,&d)!=EOF)
{
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int res = 0;
if(run(y)==1)
month[2]+=1;
for(int i = 0;i
题目描述
世界各地有多种格式来表示日期和时间。对于日期的常用格式,在中国常采用格式的是“年年年年/月月/日日”或写为英语缩略表示的”yyyy/mm/dd”,此次编程大赛的启动日期“2009/11/07”就是符合这种格式的一个日期,而北美所用的日期格式则为“月月/日日/年年年年”或”mm/dd/yyyy”,如将“2009/11/07”改成这种格式,对应的则是”11/07/2009”。对于时间的格式,则常有12小时制和24小时制的表示方法,24小时制用0-23来表示一天中的24小时,而12小时制只采用1-12表示小时,再加上am/pm来表示上午或下午,比如”17:30:00”是采用24小时制来表示时间,而对应的12小时制的表示方法是”05:30:00pm”。注意12:00:00pm表示中午12点,而12:00:00am表示凌晨12点。
对于给定的采用”yyyy/mm/dd”加24小时制(用短横线”-”连接)来表示日期和时间的字符串,请编程实现将其转换成”mm/dd/yyyy”加12小时制格式的字符串。
输入
第一行为一个整数T(T <= 10),代表总共需要转换的时间日期字符串的数目。
接下来的总共T行,每行都是一个需要转换的时间日期字符串。
输出
分行输出转换之后的结果。
样例输入 复制
2
2009/11/07-12:12:12
1970/01/01-00:01:01
样例输出 复制
11/07/2009-12:12:12pm
01/01/1970-12:01:01am
#include
using namespace std;
int main(){
int t,y,m,d,h,mm,s,cnt;
char ch;
scanf("%d",&t);
while(t--){
cnt=0;
cin>>y>>ch>>m>>ch>>d>>ch>>h>>ch>>mm>>ch>>s;
printf("%02d/%02d/%d-",m,d,y);
if(h<12 && h>0){
printf("%02d:",h);
cnt+=1;
}else if(h>12){
printf("%02d:",h-12);
}else if(h==0){
printf("%02d:",h+12);
cnt+=1;
}else if(h==12){
printf("%02d:",h);
}
printf("%02d:%02d",mm,s);
if(cnt==1)cout<<"am"<
题目描述
今天是2007年11月17日,星期六。现在如果我告诉你一个日期,你能告诉它是星期几吗?
输入
输入有多组测试数据,每个测试数据占一行。每行有3个整数,分别表示:年(0< year < 10000), 月(0 <= month < 13), 日(0 <= day < 32)。
输出
每个测试数据输出一行,如果输入数据不对,输出“illegal”,否则输出它是星期几。
样例输入 复制
2007 11 17
样例输出 复制
Saturday
#include
#include
using namespace std;
int run(int n)
{
if((n%4==0&&n%100!=0)||n%400==0)
return 1;
else
return 0;
}
int main()
{
vector a = {{"Monday"},{"Tuesday"},{"Wednesday"},{"Thursday"},{"Friday"},{"Saturday"},{"Sunday"}};
int y;int m;int d;
while(scanf("%d %d %d",&y,&m,&d)!=EOF)
{
vector a = {{"Monday"},{"Tuesday"},{"Wednesday"},{"Thursday"},{"Friday"},{"Saturday"},{"Sunday"}};
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//判断合不合法
if(y<=0||y>10000||m>12||m<=0||d<=0||d>=32)
{
printf("illegal\n");
continue;
}
int res = 0;
if(run(y)==1)
month[2]+=1;
for(int i = 1;i
题目描述
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
输入
一个整数T,表示测试数据的组数,接下来有T行日期,每行一个,格式是YYYY-MM-DD。如我的生日是1988-03-07。
输出
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
样例输入 复制
1
1988-03-07
样例输出 复制
6574
#include
using namespace std;
int run(int n)
{
if(n%4!=0||(n%100==0&&n%400!=0))
return 0;
else
return 1;
}
int main()
{
int month[13] ={0,31,28,31,30,31,30,31,31,30,31,30,31};
int t;
cin>>t;
while(t--)
{
int y;int m;int d;
scanf("%d-%d-%d",&y,&m,&d);
int count = 0;
if(m>=3)
{
for(int i=y+1;i<=y+18;i++)
{
if(run(i))
count+=366;
else
count+=365;
}
}
else if(m<=2)
{
for(int i=y;i<=y+17;i++)
{
if(run(i))
count+=366;
else
count+=365;
}
}
cout<