Advertisement

上海计算机学会2020年11月月赛C++丙组T3黑色星期五

阅读量:

黑色星期五问题:给定一个年份和该年1月1日的星期数,找出当年所有存在黑色星期五(即该月13日为星期五)的月份。通过计算每个月13日为第几天,并根据初始日期判断是否为周五来解决此问题。代码考虑了闰年、小月和大月的情况,并输出符合条件的月份或None。

黑色星期五

内存限制: 256 Mb时间限制: 1000 ms

题目描述

在西方文化中,“黑色星期五”特指每月出现于第13天且恰为周五的日子。假设给定一个整数y表示某一年份,并给出该年份一月一日对应的星期几(其中周日用7表示)。请确定在这一年中哪些月份包含有这种特殊的日子。

输入格式

两个整数:y 与 w。

输出格式

给定一组多行数据:每一行为一个整数值(0-12范围),表示对应年份中每个月份是否满足特定条件(如黑色星期五);要求对这些数值进行排序处理;若某年没有任何一个月份满足该条件,则以特殊占位符None替代

数据范围
  • 1≤y≤10000;
  • 1≤w≤7
样例数据

输入:
2017 7
输出:
1
10
说明:
2017年1月1日为周日,当年的黑色星期五在1月与10月

确定每个月的13日是当年中的哪一天;被用来判断每年中是否存在某个月份使得该月份中的第十三天恰好为星期五。

详见代码:

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
  
    
 int main() {
    
     int y, w;
    
     int day;
    
     cin >> y >> w;
    
     bool flag=1;//判断是否有黑色星期五
    
     day = 13;//一月份的13号是第13天
    
     for (int i = 1; i <= 12; i++) {
    
     //判断当月13号是否为星期五,是则输出
    
     if ((day + w - 1) % 7 == 5){
    
         cout << i << endl;
    
         flag=0;
    
     }
    
     //计算下月的13号是第几天,小月加30天,
    
     //二月根据是否闰年加29天或28天
    
     //大月加31天
    
     if (i == 4 || i == 6 || i == 9 || i == 11) {
    
         day += 30;
    
     } else if (i == 2) {
    
         if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
    
             day += 29;
    
         } else {
    
             day += 28;
    
         }
    
     } else {
    
         day += 31;
    
     }
    
     }
    
     if (flag==1){
    
     cout<<"None";
    
     }
    
     return 0;
    
 }

全部评论 (0)

还没有任何评论哟~