Nenu算法复习第六章

目录

补充知识点

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天

1160: 6001 第几天?

题目描述

给定一个日期,输出这个日期是该年的第几天。

输入

输入数据有多组,每组占一行,数据格式为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

1161: 6002 时间格式转换

题目描述

世界各地有多种格式来表示日期和时间。对于日期的常用格式,在中国常采用格式的是“年年年年/月月/日日”或写为英语缩略表示的”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"<

1162: 6003 星期几?

题目描述

今天是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

1163: 6004 18岁生日、

题目描述

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<

 

 

你可能感兴趣的:(NENU算法课,算法)