プログラミングC実験二題三計算誕生日は何曜日(0078)
2153 ワード
Description
年、月、日を含む日付を入力します.(テストデータのセット)
Input
この日付を出力するのは何曜日ですか.
Output
1
2
3
1 1 1
2 1 1
2006 7 10
Sample Input
1
2
3
Monday
Tuesday
Monday
Sample Output
1、西暦1年1月1日が月曜日であることが知られている2、アルゴリズムのヒント:2006年3月12日と入力された場合、計算方法は(1)西暦0001年の初め(0001-1)から2005年末(2005-12-31)までの合計何日を計算し、その中に閏年があり、閏年は366日、平年は365日であることに注意する.うるう年の判断条件が満たされている(教材例3.8題参照):((year%4==0&&year%100!=0)|(year%400==0))(2)2006年1月1日から2006-3-12までの日数を計算する.注意今年度が閏年かどうか、すなわち2月が28日か29日かを同様に判断する.(3)上記2つの部分を加算すると西暦0001年初頭(0001−1−1)から2006年末(2006−3−12)までの日数が加算され、この日数で7(total%7)が得られる.
年、月、日を含む日付を入力します.(テストデータのセット)
Input
この日付を出力するのは何曜日ですか.
Output
1
2
3
1 1 1
2 1 1
2006 7 10
Sample Input
1
2
3
Monday
Tuesday
Monday
Sample Output
1、西暦1年1月1日が月曜日であることが知られている2、アルゴリズムのヒント:2006年3月12日と入力された場合、計算方法は(1)西暦0001年の初め(0001-1)から2005年末(2005-12-31)までの合計何日を計算し、その中に閏年があり、閏年は366日、平年は365日であることに注意する.うるう年の判断条件が満たされている(教材例3.8題参照):((year%4==0&&year%100!=0)|(year%400==0))(2)2006年1月1日から2006-3-12までの日数を計算する.注意今年度が閏年かどうか、すなわち2月が28日か29日かを同様に判断する.(3)上記2つの部分を加算すると西暦0001年初頭(0001−1−1)から2006年末(2006−3−12)までの日数が加算され、この日数で7(total%7)が得られる.
#include
int main() {
int year = 0,month = 0,day = 0;
int leap = 0,noleap = 0;
int days_1 = 0,days_2 = 0;
int w = 0,days = 0;
scanf("%d %d %d",&year,&month,&day);
int i;
for (i = 1;i < year;i++) { //
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
leap ++;
} else {
noleap ++;
}
}
days_1 = leap * 366 + noleap * 365;
// year
int j;
for (j = 1;j < month;j++) {
switch (j) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days_2 += 31;break;
case 4:
case 6:
case 9:
case 11:days_2 += 30;break;
case 2: if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
days_2 += 29;
else
days_2 += 28;
break;
}
}
days = days_1 + days_2 + day;
w = days % 7;
switch (w) {
case 0:printf("Sunday
");break;
case 1:printf("Monday
");break;
case 2:printf("Tuesday
");break;
case 3:printf("Wednesday
");break;
case 4:printf("Thursday
");break;
case 5:printf("Friday
");break;
case 6:printf("Saturday
");break;
}
return 0;
}