ccf-CCF节日问题(测试不完全正确)

问题描述

CCF节日问题(测试不完全正确)

/*问题描述
有一类节日的日期并不是固定的,而是以“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。*/
import java.util.*;
public class Festival
{
public static void main(String [] args)
{
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
int num = sc.nextInt();
int week = sc.nextInt();
int begin_year = sc.nextInt();
int end_year = sc.nextInt();
begin_year = Math.min(begin_year,end_year);
end_year = Math.max(begin_year,end_year);
disPlay(month,num,week,begin_year,end_year);
}
public static void disPlay(int month,int num,int week,int begin_year,int end_year) //显示输出begin_year~end_year之间的情况。
{
for(int i = begin_year ; i<= end_year ; i++)
{
print(month,num,week,i);
}
}
public static void print(int month,int num,int week,int year)//显示输出某年的情况。
{
int temp = week+7-getMonthFirst(year,month)+1;
int day = 0;
if(temp!=7)
day = (week+7-getMonthFirst(year,month)+1)%7+(num-1)*7;
else
day = (week+7-getMonthFirst(year,month)+1)%7+num*7;
if(day<=DaysPerMonth(year,month))
{
System.out.println(year+"/"+add_0(month)+"/"+add_0(day));
}
else
System.out.println("none");
}
public static String add_0(int month_or_day)//当某月或某日小于10是,前面添加0。
{
if(month_or_day<10)
return 0+Integer.toString(month_or_day);
else
return Integer.toString(month_or_day);
}
public static int getMonthFirst(int year,int month)//获取某年某月的第一天星期几
{
return (int)((DaysAll(year,month)%7+2)%7);
}
public static int DaysPerMonth(int year,int month)//获取某年某月的天数
{
int days = 0;
switch(month)
{
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 :
days = 31;
break;
case 2:
if(judgeYear(year)==true)
days = 29;
else
days = 28;
break;
case 4 :
case 6 :
case 9 :
case 11 :
days = 30;
break;
}
return days;
}
public static long getDaysYears(int year)//获取从1850至某年(不包含)的总天数
{
int count = 0;
for(int i=1850 ; i<year ; i++)
{
if(judgeYear(i)==true)
count++;
}
return 366*count+365*(year-1850-count);
}
public static boolean judgeYear(int year)//判断平闰年
{
if((year%400==0)||((year%4==0)&&(year%100!=0)))
return true;
return false;
}
public static long DaysAll(int year,int month)//获取从1850/01/01至某年某月(不包含)的总天数
{
long add_months = 0;
for(int i=1;i<month;i++)
{
add_months = add_months+DaysPerMonth(year,i);
}
return add_months+getDaysYears(year);
}
}
通过了部分测试,得了80分,改了很多次,想了很多可能,都没有解决漏洞。恳请大神指点。

解决方案

http://www.cnblogs.com/Outer-Haven/p/4699131.html
http://www.bkjia.com/cjjc/1003705.html

时间: 2024-09-22 20:11:58

ccf-CCF节日问题(测试不完全正确)的相关文章

ccf-咨询CCF的节日试题(C++版本),测试只有80分

问题描述 咨询CCF的节日试题(C++版本),测试只有80分 /*问题描述 有一类节日的日期并不是固定的,而是以"a月的第b个星期c"的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日. 现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期. 提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年.例如1900年就不是闰

制冷量系数(CCF)在数据中心的价值

目前数据中心的平均制冷量几乎是IT热负荷的四倍.本文将介绍一个简单实用的标准――制冷量系数(CCF),说明如何通过将CCF作为参照衡量数据中心冷却效率的标准,从而实现降低成本的机会. 制冷量系数(CCF)计算公式: CCF通过将制冷量设备总额定制冷量(千瓦)除以IT设备关键负载(千瓦)的110%来计算. 在 Uptime调研的45个数据中心中,平均运行制冷量是IT热负荷的3.9倍(390%).其中一个案例中,制冷量是热负荷的30倍(3000%).很难相信已经如此,数据中心依然低效的. 当运行制冷

Python中的文档测试模块

  这篇文章主要介绍了Python中的文档测试模块,代码基于Python2.x版本,需要的朋友可以参考下 如果你经常阅读Python的官方文档,可以看到很多文档都有示例代码.比如re模块就带了很多示例代码: ? 1 2 3 4 >>> import re >>> m = re.search('(?<=abc)def', 'abcdef') >>> m.group(0) 'def' 可以把这些示例代码在Python的交互式环境下输入并执行,结果与文

如何用正确的方法写出高质量软件的75条体会

1. 你们的项目组使用源代码管理工具了么? MVM:应该用.VSS.CVS.PVCS.ClearCase.CCC/Harvest.FireFly都可以.我的选择是VSS. 2. 你们的项目组使用缺陷管理系统了么? MVM:应该用.ClearQuest太复杂,我的推荐是BugZilla. 3. 你们的测试组还在用Word写测试用例么? MVM:不要用Word写测试用例(Test Case).应该用一个专门的系统,可以是Test Manager,也可以是自己开发一个ASP.NET的小网站.主要目的是

Rails测试《七》实战功能测试functional test

之前我们介绍过,rails的功能测试针对的是controller,测试controller的action是否正确的执行. 测试的内容主要是: 测试请求是否正确. 测试用户是否跳转到正确的页面. 测试用户是否验证成功. 测试响应中是否包含了正确的对象. 测试在view中是否给用户显示了适当的信息. 常用的断言函数 1.assert_response(type, message = nil) 断言响应是否成功,是否是指定的状态码. assert_response :success代表200,asse

扩展JUnit测试并行程序

测试并行程序与以往有什么不同 ? 随着多核的普及,并行程序的开发已经提上日 程.相对串行程序而言,并行程序更有可能出错.一方面,并行程序的执行序列具有很强的 随机性,线程交错执行的序列可能每次都不一样,而只要一个序列有问题,整个程序就是不 正确的.另一方面,并行程序对大多数程序员来说,都是一个新的领域,经验相对较少,这 是容易出错的另外一个因素. 既然如此,我们就更需要仔细的测试我们的并行程序和 组件了.目前已经有一些 JUnit 扩展可以创建多个线程,同时运行多个测试用例,从而加快 测试用例集

《Metasploit渗透测试手册》—第1章1.8节在Metasploit框架中建立数据库

1.8 在Metasploit框架中建立数据库 Metasploit渗透测试手册 Metasploit的重要特点是包括用于存储渗透测试结果的数据库.渗透测试涉及大量信息,并且持续数天,因此存储中间结果是必要的.因此,好的渗透测试工具应该正确地整合数据库,以便快速高效地存储结果. 准备 默认情况下,Metasploit将自带的PostgreSQL作为基础数据库.在BackTrack上,还有另外一种选择,也就是MySQL数据库.用户可以使用这两种数据库中的任一种.我们先来看一下PostgreSQL数

React 测试入门教程

越来越多的人,使用React开发Web应用.它的测试就成了一个大问题. React的组件结构和JSX语法,不适用传统的测试工具,必须有新的测试方法和工具. 本文总结目前React测试的基本做法和最佳实践,手把手教你如何写React测试. 一.Demo应用 请先安装Demo. $ git clone https://github.com/ruanyf/react-testing-demo.git $ cd react-testing-demo && npm install $ npm sta

《Kali Linux渗透测试的艺术》—第2章2.3节安全测试方法论

2.3 安全测试方法论 Kali Linux渗透测试的艺术 为满足安全评估的相应需求,人们已经总结出了多种开源方法论.无论被评估目标的规模有多大,复杂性有多高,只要应用这些安全评估的方法论,就可以策略性地完成各种时间要求苛刻.富有挑战性的安全评估任务.某些方法论专注于安全测试的技术方面,有些则关注管理领域.只有极少数的方法论能够同时兼顾技术因素和管理因素.在评估工作中实践这些方法论,基本上都是按部就班地执行各种测试,以精确地判断被测试系统的安全状况. 本书再次向您推荐几种著名的安全评估方法论.本