** 某年某月的某一天:** <Excerpt in index | 首页摘要>
<The rest of contents | 余下全文>
某年某月的某一天 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 58(31 users) Total Accepted: 32(26 users) Rating: Special Judge: No Description 因为大雄考了有史以来也是唯一一次的100分,叮当猫答应带大雄去未来看一看。但是笨蛋大雄把时光机的时间调错了,结果回到了古代。叮当猫的时光机是这么用的:输入一个数n,时光机就会去到n天后或者是n天前,然后选择是往未来还是回古代。但是大雄只记得输入n天,忘了选择是去未来了。
现在告诉你大雄输入的天数,请你算出本来他们打算去的是未来哪一天以及现在在古代的哪一天。以今天,即2013年9月7号为当前天数,即算出2013年9月7号的n天前和n天后是几年几月几日。
Input 第一行输入一个数T,表示有T组样例。
接下来T行是T组数据,每组数据包含一个正整数n(n<=100000)。
Output 请计算并输出大雄本来打算去的未来的某年某月某日,以及最后去了的古代的某年某月某日。
输出日期格式为YYYY/MM/DD,两个日期中间用一个空格隔开,每组数据占一行,详情参考simple output。
Sample Input 3
18
26
31
Sample Output 2013/09/25 2013/08/20
2013/10/03 2013/08/12
2013/10/08 2013/08/07
Author 曾卓敏
做麻烦了 我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> #include<queue> using namespace std; bool check(int year) { if((year%4==0&&year%100!=0)||(year%400==0)) { return true; } return false; } int year,month,day; void up(int n) { year=2013; month=9; day=7; if(n>=24) { n-=24; month=10; day=1; } while(n>0) { if(month==2) { if(check(year)) { if(n>=29) { n-=29; month++; day=1; } else { day+=n; n=0; } } else { if(n>=28) { n-=28; month++; day=1; } else { day+=n; n=0; } } } else if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12)) { if(n>=31) { n-=31; month++; if(month>12) { year++; month=1; } day=1; } else { day+=n; n=0; } } else { if(n>=30) { n-=30; month++; day=1; } else { day+=n; n=0; } } } } void down(int n) { year=2013; month=9; day=7; if(n>=7) { n-=7; day=31; month--; } while(n>0) { if(month==3) { if(n>=31) { if(check(year)) { n-=31; month--; day=29; } else { n-=31; month--; day=28; } } else { day-=n; n=0; } } else if((month==1)||(month==8)) { if(n>=31) { month --; if(month==0) { year --; month =12; } day =31; n -=31; } else { day -=n; n =0; } } else if((month==5)||(month==7)||(month==10)||(month==12)) { if(n>=31) { month --; day =30; n -=31; } else { day -=n; n =0; } } else if(month==2) { if(check(year)) { if(n>=29) { n -=29; day =31; month --; } else { day -=n; n =0; } } else { if(n>=28) { n -=28; day =31; month --; } else { day -=n; n =0; } } } else { if(n>=30) { n -=30; month --; day =31; } else { day -=n; n =0; } } } } int main() { int T; while(~scanf("%d",&T)) { while(T--) { int n; scanf ("%d",&n); up (n); printf ("%04d/%02d/%02d ",year,month,day); down (n); printf ("%04d/%02d/%02d\n",year,month,day); } } return 0; }