
這道題我一天寫了兩次,第一次只想快點寫出來,一個字,干,
結果用switch寫出來一個大塊頭
代碼如下
#include<stdio.h>
int run(int i)
{
if((i%400==0||(i%4==0&&i%100!=0))) return 1;
else return 0;
}
int main()
{
int weeknum=0,monthnum=0,i,j,day=0,weekmonth=0;
for(i=2000;i<2020;i++)
for(j=1;j<=12;j++)
{
switch(j)
{
case 1:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 2:if((day-2)%7==0) weekmonth+=1;if(run(i)) day+=29; else day+=28;monthnum+=1;break;
case 3:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 4:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
case 5:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 6:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
case 7:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 8:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 9:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
case 10:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 11:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
case 12:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
}
}
for(j=1;j<10;j++)
{
switch(j)
{
case 1:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 2:if((day-2)%7==0) weekmonth+=1;if(run(i)) day+=29; else day+=28;monthnum+=1;break;
case 3:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 4:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
case 5:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 6:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
case 7:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 8:if((day-2)%7==0) weekmonth+=1;day+=31;monthnum+=1;break;
case 9:if((day-2)%7==0) weekmonth+=1;day+=30;monthnum+=1;break;
}
}
day+=1;monthnum+=1;
weeknum=(day-3)/7+1;
int all=day+weeknum+monthnum-weekmonth;
printf("%d",all);
return 0;
}
代碼的啰嗦程度不敢恭維,
還好結果對了
沒辦法,程式太丑,自己都嫌棄,所以我馬上又寫了一次,
這次先理了理思路再寫的,看著就簡潔多了,
第二次的代碼如下
#include<stdio.h>
int run(int i)
{
if((i%400==0||(i%4==0&&i%100!=0))) return 1;
else return 0;
}
int main()
{
int month[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
int i,j,day=0,monthnum=0,weeknum=0,weekmonth=0;
for(i=2000;i<=2020;i++)
{
if(run(i)) month[2]=29;
else month[2]=28;
for(j=1;j<=12;j++)
{
if(i==2020&&j==10) break;
if((day-2)%7==0) weekmonth+=1;
monthnum+=1; day+=month[j];
}
}
weeknum=(day-3)/7+1;
int all=day+1+weeknum+monthnum+1-weekmonth;
printf("%d",all);
return 0;
}
代碼直接少了一半多,不錯不錯,
答案也沒問題
改 ~~真理啊!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/397577.html
標籤:其他
上一篇:[ 網路協議篇 ] IGP 詳解之 OSPF 詳解(一)
下一篇:陣列常用方法總結(二)
