15年3月CCF真题3-节日

问题描述

  有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。
  现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
  提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。
  为了方便你推算,已知1850年1月1日是星期二。

输入格式

  输入包含恰好一行,有五个整数a, b, c, y1,
y2。其中c=1, 2, ……, 6,
7分别表示星期一、二、……、六、日。

输出格式

  对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。
  如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
  如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。

样例输入

5 2 7 2014 2015

样例输出

2014/05/11
2015/05/10

评测用例规模与约定

  所有评测用例都满足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050。

这算是基本编程练习吧,一遍编译通过

  1 #include <iostream>
  2 #include <vector>
  3 #include <map>
  4 #include <iomanip>
  5
  6 using namespace std;
  7
  8 bool isLeapYear(int year)
  9 {
 10     int temp = year%400;
 11     if(temp==0)
 12     {
 13         return true;
 14     }
 15     else
 16     {
 17         temp = year%4;
 18         int temp1 =year%100;
 19         if(temp==0 && temp1!=0)
 20             return true;
 21         else
 22             return false;
 23     }
 24
 25 }
 26 int days(bool leap,int month)
 27 {
 28     switch (month)
 29     {
 30         case 1:
 31             return 0;
 32         case 2:
 33                 return 31;
 34         case 3:
 35             return leap ? 60:59;
 36         case 4:
 37             return leap ? 91:90;
 38         case 5:
 39             return leap ? 121:120;
 40         case 6:
 41             return leap ? 152:151;
 42         case 7:
 43             return leap ? 182:181;
 44         case 8:
 45             return leap ? 213:212;
 46         case 9:
 47             return leap ? 244:243;
 48         case 10:
 49             return leap ? 274:273;
 50         case 11:
 51             return leap ? 305:304;
 52         case 12:
 53             return leap ? 335:334;
 54     }
 55 }
 56 int monthDays(bool leap,int month)
 57 {
 58     switch (month)
 59     {
 60         case 1:
 61         case 3:
 62         case 5:
 63         case 7:
 64         case 8:
 65         case 10:
 66         case 12:
 67             return 31;
 68         case 4:
 69         case 6:
 70         case 9:
 71         case 11:
 72             return 30;
 73         case 2:
 74             return leap ? 29:28;
 75     }
 76 }
 77 int main() {
 78     int month,week,day,year1,year2,leapCount(0);
 79     cin>>month>>week>>day>>year1>>year2;
 80     for(int i = 1850;i<year1;i++)
 81     {
 82         if(isLeapYear(i))
 83             leapCount++;
 84     }
 85     for(int i=year1;i<=year2;i++)
 86     {
 87         bool leap = isLeapYear(i);
 88         int totalDays = (i-1850)*365+leapCount+days(leap,month);
 89         int weekDay = totalDays%7+2;
 90         int ans = 8-weekDay+(week-1)*7;
 91         if(ans<monthDays(leap,month))
 92         {
 93             cout<<i<<"/";
 94             if(month<10)
 95                 cout<<0;
 96             cout<<month<<"/";
 97             if(ans<10)
 98                 cout<<0;
 99             cout<<ans<<endl;
100         }
101         else
102             cout<<"none"<<endl;
103         if(leap)
104             leapCount++;
105     }
106     return 0;
107 }
时间: 2024-11-05 06:24:58

15年3月CCF真题3-节日的相关文章

15年3月CCF真题2-数字排序

问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输入格式 输入的第一行包含一个整数n,表示给定数字的个数. 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数. 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数.按出现次数递减的顺序输出.如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的. 样例输入 12 5 2 3 3 1 3 4 2 5 2 3 5 样例输出 3 4 2 3 5 3 1 1 4 1 评

15年3月CCF真题4-网络延时

问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机.交换机与电脑之间使用网络连接.交换机按层级设置,编号为1的交换机为根交换机,层级为1.其他的交换机都连接到一台比自己上一层的交换机上,其层级为对应交换机的层级加1.所有的终端电脑都直接连接到交换机上. 当信息在电脑.交换机之间传递时,每一步只能通过自己传递到自己所连接的另一台电脑或交换机.请问,电脑与电脑之间传递消息.或者电脑与交换机之间传递消息.或者交换机与交换机之间传递消息最多需要多少步. 输入格式 输入的第一行包

15年3月CCF真题1-图像旋转

问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度. 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可. 输入格式 输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数. 接下来n行每行包含m个整数,表示输入的图像. 输出格式 输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵. 样例输入 2 3 1 5 3 3 2 4 样例输出 3 4 5 2 1 3 评测用例规模与约定 1 ≤ n, m ≤ 1,00

15年3月CCF真题5-最小花费

问题描述 C国共有n个城市.有n-1条双向道路,每条道路连接两个城市,任意两个城市之间能互相到达.小R来到C国旅行,他共规划了m条旅行的路线,第i条旅行路线的起点是si,终点是ti.在旅行过程中,小R每行走一单位长度的路需要吃一单位的食物.C国的食物只能在各个城市中买到,而且不同城市的食物价格可能不同. 然而,小R不希望在旅行中为了购买较低价的粮食而绕远路,因此他总会选择最近的路走.现在,请你计算小R规划的每条旅行路线的最小花费是多少. 输入格式 第一行包含2个整数n和m. 第二行包含n个整数.

14年12月CCF真题2-Z字形扫描

问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1539 3756 9464 7313 对其进行Z字形扫描后得到长度为16的序列: 1539739547366413 请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行 Z字形扫描的结果. 输入格式 输入的第一行包含一个整数n,表示矩阵的大小. 输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给

14年12月CCF真题1-门禁系统

问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每 位读者有一个编号,每条记录用读者的编号来表示.给出读者的来访记录,请 问每一条记录中的读者是第几次出现. 输入格式 输入的第一行包含一个整数n,表示涛涛的记录条数. 第二行包含n个整数,依次表示涛涛的记录中每位读者的编号. 输出格式 输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号 是第几次出现. 输入样例 5 12113 输出样例 11231 评测用例规模与约定 1≤n≤1,000,读者的编号为不超过

14年12月CCF真题5-货物调度

问题描述 某公司要处理一个周期性的物流问题. 有n个城市,第i个城市在每周的第j(1≤j≤7) 天会生产aij吨某种货物,同时 需要消耗bij吨该种货物.已知每周的产量等于消耗量(即aij之和等于bij之和). 城市之间有m条道路,第k条道路连接了城市sk和tk.一条道路上运输1吨 货物有一个固定的成本ck.道路都可以双向使用.每天运输的货物量没有限制.城市之间的距离并不远,货物可以从任意一个城市运输到任意另一个城市并且在当天到达. 货物如果在当天没有被消耗掉,就需要存放在仓库里过夜.第i个城市

14年12月CCF真题3-集合竞价

问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特 定股票的开盘价和开盘成交量. 该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种: 1. buy p s 表示一个购买股票的买单,每手出价为p,购买股数为s. 2. sell p s 表示一个出售股票的卖单,每手出价为p,出售股数为s. 3. cancel i表示撤销第i行的记录. 如果开盘价为p0,则系统可以将所有出价至少为p0的买单和所有出价至多 为p0的卖单进行匹配.因此,此时的开盘成交量为出价至少为p

14年12月CCF真题4-最优灌溉

问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口 很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利用 部分麦田作为“中转站”,利用水渠连接不同的麦田,这样只要一片麦田能被 灌溉,则与其连接的麦田也能被灌溉. 现在雷雷知道哪些麦田之间可以建设水渠和建设每个水渠所需要的费用 (注意不是所有麦田之间都可以建立水渠).请问灌溉所有麦田最少需要多少 费用来修建水渠. 输入格式 输入的第一行包含两个正整数n, m,分别表示