我被要求解決這個問題。我的代碼輸出 316 但有人建議 345 是正確答案。我不知道我的代碼是否正常作業,因為我使用 Sakamoto 演算法來計算給定日、月和年的作業日。由于 2002 年 3 月 24 日的實際日期是星期日而不是星期三(0 是星期日 ... 6 是星期六)。我在演算法中添加 3(作為常量變數)。這就是我是否做出正確選擇而有點猶豫的地方。但是,我認為轉變不會影響任何事情,所以這應該有效嗎?或者,我可以將作業日設定為星期二而不是星期五,而無需任何常數。
這是我的代碼:
#include <stdio.h>
#include <math.h>
int howManyDays() {
int sakamoto();
int starting_weekday = 3;
int result = sakamoto(24,3,2002,0);
int constant = starting_weekday - result;
int calculated_year = 1801;
int calculated_month = 1;
int count = 0;
do {
int calculated_weekday = sakamoto(5, calculated_month, calculated_year, constant);
//int calculated_weekday = (calculated_day constant day_in_months[calculated_month-1]) % 7;
if (calculated_weekday == 5) {
count = 1;
}
calculated_month = 1;
if (calculated_month == 12) {
calculated_month = 1;
calculated_year = 1;
}
} while(!(calculated_month == 1 && calculated_year == 2001));
return count;
}
int sakamoto(int d, int m, int y, int c) {
int offset[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; // 0->Sunday ... 2->Tuesday ... 6->Saturday
y -= m < 3;
return (y y / 4 - y / 100 y / 400 offset[m - 1] d c) % 7;
}
int main() {
int a = howManyDays();
printf("result: %d", a);
}
Could anyone confirm whether what I think is correct or completely false?? Thanks in Advance, Hope you have a wonderful time :)
uj5u.com熱心網友回復:
您的月份范圍從1到11。由于您不計算 12 月的星期五,因此您的結果大約相差 1/12,實際上是 345*11/12 = 316.25。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440252.html
上一篇:傳遞sockaddr_in時,accept()函式失敗
下一篇:功能中的錯誤(?),我不明白
