题目链接:http://nyoj.top/problem/1363

  • 内存限制:256MB 时间限制:3000ms 

题目描述

为什么花那么多时间、精力还是学不好学不通,如何把握各科目的重难点,期中和期末如何梳理本学期各知识点及内部联系……在孩子学习的过程中,我们该如何帮助孩子快速提高成绩呢?
打造名校进阶计划,让孩子会学习、会考试,实现名校梦想! 
Dr. Kong, 作为一名从教多年的老师,跟踪了大量成绩好的学生,发现他们的学习习惯非常规律,有方法、有计划、有目标、有总结。比如:已考上**大学的李明同学,从小学开始订学习计划,达成目标。每经过N天就检查目标是否完成,写总结,并确定下一个学习目标。
已知李明在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

解题思路

题意:给你一个日期和当天是星期几,求n天后的日期并求出是星期几。
思路:直接从那一天跑个循环就行了,简单的模拟一下,这里有个技巧就是用%md来读入日期。

#include <bits/stdc++.h>
using namespace std;
int a[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int leap(int year) {
    return year % 100 && !(year % 4) || !(year % 400);
}
int main() {
    int t, w, n, year, month, day;
    scanf("%d", &t);
    while (t--) {
        scanf("%4d%2d%2d%d%d", &year, &month, &day, &w, &n);
        for (int i = 1; i <= n; i++) {
            if (day >= a[leap(year)][month]) {
                if (month >= 12) {
                    year++;
                    month = 0;
                }
                month++;
                day = 0;
            }
            day++;
        }
        printf("%04d%02d%02d %d\n", year, month, day, (n + w - 1) % 7 + 1);
    }
    return 0;
}