ACM 第十一届 河南省省赛A题 计划日
一、题目描述如下:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。二、思路分析
其实这个如果是一个填空题,可以直接用Excel快速计算出来,反而用代码比较麻烦
说一下我的代码的思路:
1.如果N大于本月剩下的天数,就先从N天里减去本月剩下的天数,
2.如果剩下的N天大于本年剩下的天数,就从N天里减去本年剩下的天数,这时候日期为YYYY+1年 1月 1日
3.因为闰年每四年一次,可以从N里面减去k个365*3+366天,直到N小于365*3+366,这时日期为YYYY+1+k年 1月 1日
4.从N里面减去t个当前年的天数(平年为365,闰年为366),直到N小于当前年的天数,这时候日期为YYYY+1+k+t年 1月 1日
5.从N里面减去p个月的天数,直到剩下的N不够本月的天数,这时候就能得到最后的日期为YYYY+1+k+t年 p月 N日
6.星期很好算,直接用(W+N)%7就能得到最后的星期
三、根据思路,Java代码如下(如有其他思路,恭请各位大佬评论区评论,我觉得我的思路太麻烦)
import java.util.Scanner; public class Main1 { static Scanner sc = new Scanner(System.in); static int j = sc.nextInt(); static String str; static int year,month,day,w,N,m,monthDay; static int temp = 366+365*3; public static void main(String[] args) { for (int i = 0; i < j; i++) { str = sc.next(); year = Integer.parseInt(str.substring(0, 4)); month = Integer.parseInt(str.substring(4,6)); day = Integer.parseInt(str.substring(6,8)); w =sc.nextInt(); N = (int) sc.nextLong(); m = (int) (N/temp); w = (w+N)%7;//6.星期很好算,直接用(W+N)%7就能得到最后的星期
days();//1.如果N大于本月剩下的天数,就先从N天里减去本月剩下的天数,
months();//2.如果剩下的N天大于本年剩下的天数,就从N天里减去本年剩下的天数,这时候日期为YYYY+1年 1月 1日
years();//3.因为闰年每四年一次,可以从N里面减去k个365*3+366天,直到N小于365*3+366,这时日期为YYYY+1+k年 1月 1日
year();//4.从N里面减去t个当前年的天数(平年为365,闰年为366),直到N小于当前年的天数,这时候日期为YYYY+1+k+t年 1月 1日
months();//5.从N里面减去p个月的天数,直到剩下的N不够本月的天数,这时候就能得到最后的日期为YYYY+1+k+t年 p月 N日
System.out.println(year+""+String.format("%02d", month)+""+String.format("%02d", day)+" "+w); } } //从N里面减去本月剩下的天数
static void days(){ monthDay = getdays(year,month); if(day+N>monthDay){ N=N+day-monthDay-1; day=1; month++; }else{ day+=N; N=0; } } //从N里面减去p月的天数,直到N小于本月天数或者月数大于12
static void months(){ monthDay = getdays(year,month); while(month<=12 && N>=monthDay){ if(N==0){ break; }else{ month++; day=1; if(N>=monthDay) N-=monthDay; else{ day=N; break; } } } if(month==13){ month=1; year++; }else{ day+=N; N=0; } } //从N里面减去k个四年
static void years(){ while(N>temp){ year+=4; N-=temp; } } //从N里面减去当前年的天数,直到N小于当前年的天数
static void year(){ int nowyear = getYear(year); while(N>=nowyear){ year++; N-=nowyear; nowyear = getYear(year); } } //判断是否是闰年
static boolean jugeYear(int year){ if(year %4==0&&year%100!=0 || year%400==0) return true; return false; } //获取当前年的天数
static int getYear(int year){ int nowyear = 365; if(jugeYear(year)) nowyear = 366; return nowyear; } //获取当前月的天数
static int getdays(int year,int month){ if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) return 31; else if(month==4 || month==6 || month==9 || month==11 ) return 30; else{ if(jugeYear(year)) return 29; else
return 28; } } }

更多精彩