【河南省第十一届ACM程序设计大赛-A】计划日

已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗?

输入

第一行: T        表示以下有T组测试数据             ( 1≤ T  ≤8 )
    对每组数据, 占一行:
    YYYYMMDD  W  N     (20000101≤YYYYMMDD≤20180527  1≤W≤ 7  1 ≤N≤ 8000 )

输出

对每组测试数据,输出占一行,格式为:YYYYMMDD  W   ( 中间一个空格 )

样例输入

2
20180527  7  1                      
20180214  3  289

样例输出

20180528  1
20181130  5

直接暴力,很省事。。。

#include <bits/stdc++.h>
using namespace std;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool run(int y)
{
    if((y%4 == 0 && y%100 != 0) || y%400 == 0)
    return 1;
    return 0;
}
int main()
{
    int t, n;
    cin>>t;
    while(t--)
    {
        int y, m, d, xq;
        scanf("%4d%2d%2d", &y, &m, &d);
        scanf("%d%d", &xq, &n);
        xq = (xq+n)%7;
        if(xq == 0) xq += 7;
        while(n)
        {
            if(run(y)) a[2] = 29;
            else a[2] = 28;
            while(a[m]>d && n)
            {
                d++;
                n--;
            }
            if(n) 
            {
                m++;
                d = 0;
            }
            if(m == 13)
            {
                y += 1;
                m = 1;
                continue; 
            }
        }
        printf("%d%02d%02d %d
", y, m, d, xq);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/lesroad/p/9123036.html