ccf节日
来源:互联网 发布:手机视频捕捉软件 编辑:程序博客网 时间:2024/05/01 02:34
这道题思路感觉不是太难,主要是在实现过程中如何减少代码重复的片段,我后来看了网上的一些代码,长的有两百多行,有的思路也比较拧巴,在这里记录一下我的解法:
package CCF;import java.util.Scanner;public class Date {public static void main(String args[]){Scanner scan=new Scanner(System.in);int month=scan.nextInt();int num=scan.nextInt();int day=scan.nextInt();int year1=scan.nextInt();int year2=scan.nextInt();int []days={0,31,28,31,30,31,30,31,31,30,31,30,31};int []week={2,3,4,5,6,7,1};for(int i=year1;i<=year2;i++){int sum=0;days[2]=28;//计算从1850年1月1日到year年1月1日总共有多少天for(int j=1850;j<i;j++){if(isLeep(j))sum+=366;elsesum+=365;}//计算从year年1月1日到year年month-1月的最后一天有多少天if(isLeep(i)){days[2]=29;for(int j=1;j<month;j++){sum+=days[j];}}else{for(int j=1;j<month;j++){sum+=days[j];}}//计算year年month月1日是星期几int xingqi=((sum-1)%7+2)%7; //实际计算的是month-1月最后一天星期几int m=1;xingqi++;if(xingqi<=day){m+=(num-1)*7+(day-xingqi);}else{m+=num*7+day-xingqi;}if(m>days[month]){System.out.println("none");}else{if(month<10){if(m<10){System.out.println(i+"/"+"0"+month+"/"+"0"+m);}else{System.out.println(i+"/"+"0"+month+"/"+m);}}else{System.out.println(i+"/"+month+"/"+m);}}}}public static boolean isLeep(int year){if(year%4==0&&year%100!=0||year%400==0)return true;elsereturn false;}}
我觉得整个代码比较复杂的部分在这里
//计算year年month月1日是星期几int xingqi=((sum-1)%7+2)%7; //实际计算的是month-1月最后一天星期几int m=1;xingqi++;
弄清楚这一步,首先要知道余数和星期之间有这样的对应关系:
余数:0 1 2 3 4 5 6
星期:2 3 4 5 6 7 1
也就是说余数与星期之间的关系是:(余数+2)%7=星期
为什么要先计算month月1日的前一天呢?设想一下如果直接计算1日,如果余数恰好为5,则根据上面算式会得出那天是星期零,所以很明显是错误的,因此先计算前一天,就算前一天算出来是星期零,但加1之后1号是星期一所以不会有任何问题。
还有sum为什么要-1?我们已知1850年1月1日星期2,sum包括了这一天,只有减去这一天才是month-1月的最后一天与1850年1月1日的真正的差值,用这个差值对7取余才算正确。
阅读全文
0 0
- 【CCF】节日
- CCF 节日
- CCF--节日
- CCF节日
- CCF节日
- ccf 节日
- ccf节日
- CCF节日
- CCF 201503-3 节日
- CCF-节日-201503-3
- ccf 201503-3 节日
- CCF-201503-3 节日
- CCF 201503-3 节日
- CCF csp试题-节日
- CCF-201503-3-节日
- CCF 201503-3节日
- ccf认证节日
- ccf 节日 java 思路
- Linux 常用命令详解
- XYNUOJ 1246 repair the wall
- NYOJ 1103 区域赛系列一多边形划分
- C++控制语句
- 使用Hadoop的C API操作HDFS
- ccf节日
- springmvc的配置
- CAS与Unsafe
- HDU 2553 N皇后问题(dfs)
- Jdbc模版式写法与Spring-JdbcTemplate的比较
- 用python简单处理图片(2):图像通道\几何变换\裁剪
- python生成器
- 使用Go语言实现简单的Get请求
- 浅谈HDFS和MapReduce-YARN的运行原理