hdu4515小Q系列故事——世界上最遥远的距离(几点注意的地方以及测试数据)
2013-05-28 01:32
239 查看
很恶心的模拟题.......不过编完后,有着一些收获,以后的年月日题目都可以以这个代码为模板了。
注意:这道题目加日期很好编,只要注意每次在加的时候,在月的时候,先转为某个月份的最后一天,然后再去判断大于这个的月份就直接减去这个月份,在年的转化中,都将它转为****/12/31,再去一年一年的加减.......
加法的测试数据:
38
39
282
283
7
8
减法的时候,就要注意好多了,我一开始按照加法的细节处理来处理减法,发现各种细节错误,在月份的时候,要转为钱一个月的最后一天,就是当day “大于等于"这个月份的时候,将这个月份减去(注意,这里不同于加法),这样可以避免出现2013/02/00的情况,在转化年的时候,要转为前一年的12/31,避免出现2013/01/00这种情况
减法测试数据:
52
87345
24
23
100000
下面是代码:
注意:这道题目加日期很好编,只要注意每次在加的时候,在月的时候,先转为某个月份的最后一天,然后再去判断大于这个的月份就直接减去这个月份,在年的转化中,都将它转为****/12/31,再去一年一年的加减.......
加法的测试数据:
38
39
282
283
7
8
减法的时候,就要注意好多了,我一开始按照加法的细节处理来处理减法,发现各种细节错误,在月份的时候,要转为钱一个月的最后一天,就是当day “大于等于"这个月份的时候,将这个月份减去(注意,这里不同于加法),这样可以避免出现2013/02/00的情况,在转化年的时候,要转为前一年的12/31,避免出现2013/01/00这种情况
减法测试数据:
52
87345
24
23
100000
下面是代码:
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int main() { int s[300],t[300],a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; s[0]=282; t[0]=83; int sum=282; //这是加法的初始值,你会发现,加上282天就是2013、12、31 for(int i=2014;i<=2013+298;i++) { if(i%4==0&&i%100!=0||i%400==0) sum+=366; else sum+=365; s[i-2013]=sum; } sum=83; //这是减法的初始值,你会发现,减去83就是2012、12、31 for(int i=2012;i>=2013-298;i--) { if(i%4==0&&i%100!=0||i%400==0) sum+=366; else sum+=365; t[2013-i]=sum; } int text; scanf("%d",&text); while(text--) { int day; scanf("%d",&day); int day1=day; int year,mon,i=0; for(;i<=298;i++) if(day<=s[i]) //注意,这里去加法的算法,与减法不同 break; year=i+2013; if(i==0) { if(day<=31-24) { mon=3; day=24+day; } else { day-=7; int j; for(j=4;j<=11;j++) if(day>a[j]) //注意.....区别减法 day-=a[j]; else break; mon=j; } } else { day-=s[i-1]; if(s[i]-s[i-1]==366) a[2]++; int j; for(j=1;j<=11;j++) if(day>a[j]) day-=a[j]; else break; mon=j; if(s[i]-s[i-1]==366) a[2]--; } printf("%04d/%02d/%02d ",year,mon,day); day=day1; i=0; for(;i<=298;i++) if(day<t[i]) //不同之处....... break; year=2013-i; if(i==0) { if(day<=24-1) { mon=3; day=24-day; } else { day-=24; int j; for(j=2;j>=1;j--) if(day>=a[j]) //不同之处 day-=a[j]; else break; mon=j; day=a[j]-day; } } else { day-=t[i-1]; //printf("\n%d\n",day); if(t[i]-t[i-1]==366) a[2]++; int j=12; for(;j>=2;j--) if(day>=a[j]) //注意 day-=a[j]; else break; mon=j; //printf("%d\n",day); day=a[j]-day; //printf("\n%d %d\n",day,a[j]); if(t[i]-t[i-1]==366) a[2]--; } printf("%04d/%02d/%02d\n",year,mon,day); } return 0; }
相关文章推荐
- hdu4515小Q系列故事——世界上最遥远的距离
- HDU4515小Q系列故事——世界上最遥远的距离
- hdu4515小Q系列故事——世界上最遥远的距离
- HDU 4515 小Q系列故事——世界上最遥远的距离(模拟)
- hdu 4515——小Q系列故事——世界上最遥远的距离
- 杭电4515-小Q系列故事——世界上最遥远的距离
- HDOJ 4515 小Q系列故事——世界上最遥远的距离
- hdu4515 小Q系列故事——世界上最遥远的距离(C语言)
- ELK系列~log4-nxlog-Fluentd-elasticsearch写json数据需要注意的几点
- hdu 4515 小Q系列故事——世界上最遥远的距离
- hdu 4504(威威猫系列故事——篮球梦,需注意一组模糊的数据)
- HDU_4515 小Q系列故事——世界上最遥远的距离
- 小Q系列故事——世界上最遥远的距离
- HDU4515 小Q系列故事——世界上最遥远的距离
- HDU 4515 小Q系列故事——世界上最遥远的距离
- hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)
- WSDL接口数据传递以及外网发布需要注意的地方
- HDU 4515 小Q系列故事——世界上最遥远的距离(模拟题)
- 大数据学习系列之九---- Hive整合Spark和HBase以及相关测试
- 【Apache Flume系列】Flume-ng failover 以及Load balance测试及注意事项