第十一届河南省赛--A计划日

题目链接

为什么花那么多时间、精力还是学不好学不通,如何把握各科目的重难点,期中和期末如何梳理本学期各知识点及内部联系……在孩子学习的过程中,我们该如何帮助孩子快速提高成绩呢?
打造名校进阶计划,让孩子会学习、会考试,实现名校梦想!
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

思路

  • 计算总天数,一年一年的减去
    比赛的时候一直WA,回来根据数据调了一下,原来是个小细节错了,当剩下的天数刚好是一年就不能减了,直接是这一年的最后一天 12月31日 减过之后就成了year+1,day = 0
  • 暴力模拟 一天一天加
    来自队友的AC提示(大佬就是大佬,都没想到用暴力模拟)

A.in

6
20000101 6 3855
20040214 6 3974
20070701 7 243
20180527 7 66
20180527 7 900
20070703 2 5295
A.out
20100722 4
20150101 4
20080229 5
20180801 3
20201112 4
20211231 5

AC

#include<bits/stdc++.h>
#define N 100005 
using namespace std;
int sum_year;
int Mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void judge(int year) {
    if (year % 400 == 0 || (year % 100 && year % 4 == 0)) {
        sum_year = 366;
        Mon[2] = 29;
    }else {
        sum_year = 365;
        Mon[2] = 28;
    }
}
int main () {
  //  freopen("in.txt", "r", stdin);
    int t;
    cin >> t;
    while (t--) {
        int num, w, n;
        cin >> num >> w >> n;
        int year, mon, day;
        day = num % 100;
        num /= 100;
        mon = num % 100;
        num /= 100;
        year = num;
        judge(year);
        int sum_day = day + n;
        for (int i = 1; i < mon; i++) {
            sum_day += Mon[i];
        }
        // 比赛的时候写成  sum_day >= sum_year
        // 数据刚好卡了这个点
        // in  20070703 2 5295
        // out 20211231 5
        // error_out 20220100 5
        while (sum_day > sum_year) {
            sum_day -= sum_year;
            year++;
            judge(year);
        }
        mon = 1; 
        for (int i = 1; i <= 12; i++) {
            if (sum_day > Mon[i]) {
                sum_day -= Mon[i];
                mon++;
            }else {
                break;
            }
        } 
        day = sum_day;
        w = (n + w) % 7;
        if (w == 0)     w = 7;
        cout <<year;
        if (mon <= 9)   cout << 0 << mon;
        else    cout << mon;
        if (day <= 9)   cout << 0 << day;
        else    cout << day;
        cout << " " << w << endl; 
    }   
    return 0;
}

AC

#include<bits/stdc++.h>
#define N 100005 
using namespace std;
int sum_year;
int Mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void judge(int year) {
    if (year % 400 == 0 || (year % 100 && year % 4 == 0)) {
        Mon[2] = 29;
    }else {
        Mon[2] = 28;
    }
}
int main () {
    //freopen("in.txt", "r", stdin);
    int t;
    cin >> t;
    while (t--) {
        int num, w, n;
        cin >> num >> w >> n;
        int year, mon, day;
        day = num % 100;
        num /= 100;
        mon = num % 100;
        num /= 100;
        year = num;
        judge(year);
        w = (w + n) % 7;
        if (!w) w = 7; 
        while (n--) {
            day++;
            if (day > Mon[mon]) {
                day = 1;
                mon++;
                if (mon > 12) {
                    year++;
                    judge(year);
                    mon = 1;
                }
            }
        }   
        cout <<year;
        if (mon <= 9)   cout << 0 << mon;
        else    cout << mon;
        if (day <= 9)   cout << 0 << day;
        else    cout << day;
        cout << " " << w << endl;   
    }   
    return 0;
}

猜你喜欢

转载自blog.csdn.net/henuyh/article/details/80531274
今日推荐