第四次CCF计算机软件能力认证考试题解(Java)--201503--节日--100分通过
来源:互联网 发布:cf冰域炸服器软件 编辑:程序博客网 时间:2024/04/29 09:22
问题描述
有一类节日的日期并不是固定的,而是以“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(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"(不包含双引号)。
如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。
样例输入
5 2 7 2014 2015
样例输出
2014/05/11
2015/05/10
2015/05/10
评测用例规模与约定
所有评测用例都满足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050。
完整代码
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int a,b,c,y1,y2; a=sc.nextInt(); b=sc.nextInt(); c=sc.nextInt(); y1=sc.nextInt(); y2=sc.nextInt(); for(int y=y1;y<=y2;y++){ int sum=0; int feb=0; int flag=0; for(int year=1850;year<y;year++){ if(year%400==0){ sum+=366; feb=29; }else if(year%4==0&&year%100!=0){ sum+=366; feb=29; }else{ sum+=365; feb=28; } } if(y%400==0){ feb=29; }else if(y%4==0&&y%100!=0){ feb=29; }else{ feb=28; } switch(a){ case 1:{ sum+=0; for(int i=0;i<31;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/01/0"+(i+1)); }else{ System.out.println(y+"/01/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 2: { sum+=31; for(int i=0;i<feb;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/02/0"+(i+1)); }else{ System.out.println(y+"/02/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 3: { sum+=31+feb; for(int i=0;i<31;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/03/0"+(i+1)); }else{ System.out.println(y+"/03/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 4: { sum+=31+feb+31; for(int i=0;i<30;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/04/0"+(i+1)); }else{ System.out.println(y+"/04/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 5:{ sum+=31+feb+31+30; for(int i=0;i<31;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/05/0"+(i+1)); }else{ System.out.println(y+"/05/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 6: { sum+=31+feb+31+30+31; for(int i=0;i<30;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/06/0"+(i+1)); }else{ System.out.println(y+"/06/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 7: { sum+=31+feb+31+30+31+30; for(int i=0;i<31;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/07/0"+(i+1)); }else{ System.out.println(y+"/07/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 8: { sum+=31+feb+31+30+31+30+31; for(int i=0;i<31;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/08/0"+(i+1)); }else{ System.out.println(y+"/08/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 9: { sum+=31+feb+31+30+31+30+31+31; for(int i=0;i<30;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/09/0"+(i+1)); }else{ System.out.println(y+"/09/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 10:{ sum+=31+feb+31+30+31+30+31+31+30; for(int i=0;i<31;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/10/0"+(i+1)); }else{ System.out.println(y+"/10/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 11: { sum+=31+feb+31+30+31+30+31+31+30+31; for(int i=0;i<30;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/11/0"+(i+1)); }else{ System.out.println(y+"/11/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } case 12: { sum+=31+feb+31+30+31+30+31+31+30+31+30; for(int i=0;i<31;i++){ sum=sum+1; if(sum%7==(c-1)){ flag++; } if(flag==b){ if(i<9){ System.out.println(y+"/12/0"+(i+1)); }else{ System.out.println(y+"/12/"+(i+1)); } break; } } if(flag!=b){ System.out.println("none"); } flag=0; break; } default:break; } } } }注意事项
该代码已在CCF认证平台上满分100分通过,将代码复制到CCF认证平台上进行测试时,注意其提交要求,我的程序没有使用package语句来定义包的信息。(如果定义了将无法评测),所以需要将以上代码的package语句删除,以上代码还可以优化,尤其是判断月份部分,代码重复太多,本人限于时间,未做更多优化,欢迎讨论
1 0
- 第四次CCF计算机软件能力认证考试题解(Java)--201503--节日--100分通过
- 第六次CCF计算机软件能力认证考试题解(Java)--201512--数位之和--100分通过
- 第三次CCF计算机软件能力认证考试题解(Java)--201412--Z字形扫描--100分通过
- 第二次CCF计算机软件能力认证考试题解(Java)--201409--字符串匹配--100分通过
- 第三次CCF计算机软件能力认证考试题解(Java)--201412--最优灌溉--100分通过
- 第六次CCF计算机软件能力认证考试(第四题)
- 第七次CCF计算机软件能力认证题解
- 2015年3月CCF计算机软件能力认证题:节日
- CCF计算机软件能力认证考试-201412-1-门禁系统
- CCF计算机软件能力认证考试-201412-2-Z字形扫描
- 第四届CCF计算机职业资格认证考试题解(C++)
- 【实(dou)力(bi)首(mai)发(meng)】第四次CCF软件能力认证题解
- CCF计算机软件能力认证模拟试题参考答案(JAVA)(201703 1+2)
- CCF计算机软件能力认证模拟试题-出现次数最多的数(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题-有趣的数(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题-ISBN号码(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题-最大的矩形(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-折点计算(Java参考答案学习记录)
- 页面跳转改变nav效果
- 优化系列 | 实例解析MySQL性能瓶颈排查定位
- 单例设计模式
- 一张图片的2D to 3D过程
- “百脑虫”手机病毒分析报告
- 第四次CCF计算机软件能力认证考试题解(Java)--201503--节日--100分通过
- 启动页图片尺寸
- Windows下MPI的环境搭建及机群测试
- 读取配置文件乱码
- 离线安装Cloudera Manager 5和CDH5(最新版5.1.3) 完全教程
- iOS中的KVO使用
- 将matlab中数据导出VC导入
- spring 定时器配置
- swift 绘图