ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法笔记007——日期问题合辑

2019-10-29 15:52:08  阅读:285  来源: 互联网

标签:30 int 31 合辑 样例 算法 007 year day


问题 A: 判断闰年
时间限制: 1 Sec  内存限制: 128 MB
提交: 17  解决: 9
[提交][状态][讨论版][命题人:1010101010]
题目描述
判断某年是否是闰年。 输入
输入只有一行,包含一个整数a(0 < a < 3000) 输出
一行,如果公元a年是闰年输出Y,否则输出N 样例输入
2006
样例输出
N
#include <cstdio>
int main()
{
    int year;
    scanf("%d",&year);
    if((year%4 == 0 && year%100 != 0)||year%400 == 0)
        printf("Y");
    else
        printf("N");
    return 0;
}   问题 B: 细菌繁殖
时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 0
[提交][状态][讨论版][命题人:1010101010]
题目描述
一种细菌的繁殖速度是每天成倍增长。例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,……。现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。 输入
第一行有一个整数n,表示测试数据的数目。其后n行每行有5个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在长整数(long)范围内。 输出
对于每一组测试数据,输出一行,该行包含一个整数,为要求的一天的细菌数。 样例输入
2
1 1 1 1 2
2 28 10 3 2
样例输出
2
40
#include <cstdio>
int date[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{     int n, fm, fd, t, bm, bd;
    scanf("%d",&n);
    while(n--)
    {
        int sum_date = 0;
        scanf("%d%d%d%d%d", &fm, &fd, &t, &bm, &bd);
        sum_date = bd - fd;
        while(fm != bm)
        {
            sum_date += date[fm];
            fm++;
        }
        for(int i = 0; i < sum_date; i++)
        {
            t *= 2;
        }
        printf("%d\n",t);
    }
    return 0;
}
问题 C: 不吉利日期
时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 0
[提交][状态][讨论版][命题人:1010101010]
题目描述
在国外,每月的13号和每周的星期5都是不吉利的。特别是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7) 输入
输入有一行,即一月一日星期几(w)。(1<=w<=7) 输出
输出有一到多行,每行一个月份,表示该月的13日是星期五。 样例输入
7
样例输出
1
10
#include <cstdio>
int main()
{
    int day[8] = {0,6,7,1,2,3,4,5};
    int date[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int n;
    scanf("%d",&n);
    for(int i = 1; i <= 12; i++)
    {
        if(day[n] == 5)
            printf("%d\n",i);
        n = (n + date[i])%7;
        if(n == 0)
            n = 7;
    }
    return 0;
}   问题 K: 日历问题
时间限制: 1 Sec  内存限制: 128 MB
提交: 37  解决: 12
[提交][状态][讨论版][命题人:1010101010]
题目描述
在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。
输入
输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。
输出
对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 或 "Saturday“。
样例输入
1730
1740
1750
1751
-1
样例输出
2004-09-26 Sunday
2004-10-06 Wednesday
2004-10-16 Saturday
2004-10-17 Sunday   #include <cstdio> int year, month, day, t;
char week[7][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; bool IsEndofMonth()//返回值为1或者0;
{
    switch(month)
    {
    case 4:
    case 6:
    case 9:
    case 11:
        return day == 30;
    case 2:
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
            return day == 29;
        else
            return day == 28;
    default:
        return day == 31;
    }
} void AddDay(int days)
{
    for (int i = 0; i < days; i++)
    {
        if(IsEndofMonth())
        {
            if(month == 12)
            {
                day = 1;
                month = 1;
                year++;
            }
            else
            {
                day = 1;
                month++;
            }
        }
        else
        {
            day++;
        }
    }
} int main()
{
    int n;
    while (~scanf("%d",&n))
    {
        if(n == -1)
            break;
        year = 2000;
        month = 1;
        day = 1;
        t = 6;
        AddDay(n);
        t = (t + n)%7;
        printf("%d-%02d-%02d %s\n", year, month, day, week[t]);
    }
    return 0;
}

标签:30,int,31,合辑,样例,算法,007,year,day
来源: https://www.cnblogs.com/jun-ruo-sui-nian/p/suijun_007.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有