其大意為,輸入乙個日期,要求輸出該日期為星期幾。
星期幾是以七為週期迴圈的,那麼只需要知道:1.今天是星期幾;2.今天和所給定的那天相隔幾天。利用其對7求餘數便可以知道所給定的那天是星期幾。
#include #include #define isleapyeap(x) (x%100!=0 && x%4 == 0) || x%400==0 ? 1 : 0
int dayofmonth[13][2] = ;
struct date }}
};int buf[3001][13][32];
char monthname[13][20] = ; //月名每個月名對應下標1到12
char weekname[7][20] = ; //周名每個周名對應下標0到6
int main () //預處理出每一天與原點日期的天數差
int d , m, y;
char s[20];
while (scanf ("%d%s%d",&d,s,&y) != eof)
}int days = buf[y][m][d] - buf[2019][2][25]; //計算給定日期與今日日期的天數間隔(注意可能為負)
days += 1; 為星期一,對應陣列下標為1,則計算1經過days天後的下標
puts(weekname[(days % 7 + 7) % 7]); //將計算後得出的下標用7對其取模,並且保證其為非負數,則該下標即為答案所對應的下標,輸出即可
}return 0;
}
處理出每個日期與原點日期之間的天數間隔(依然選用0年1月1日為原點日期,實際上原點日期可以按照要求任意選取)。然後計算該日期與當前日期的天數間隔。若間隔為正,則表示目標日期在當前日期之後;若為負,則表示目標日期在當前日期之前。
同時將週日到周一分別對應陣列下標0到6(與儲存周名陣列保持一致),當前日期為星期一,固對應陣列下標為1,在其上加上剛剛算得的日期間隔,如200天,那麼取的目標日期的下標1+200=201,又由於星期是以7為週期迴圈的,用7對其去模(即求餘數),來計算其真正的下標(若為負數,則還要保證該下標為正,可以簡單的處理成餘數加7再求模),201 % 7 = 5,則表示經過若干個迴圈後,目標天的周名下標為5。將該下標對應的星期名輸出,即為需要的答案,weekname[5],「friday」即為所求。
由此可總結出處理區間問題的一種重要方法——預處理。
Sort 九度教程第11題
時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 題目描述 給你n個整數,請按從大到小的順序輸出其中前m大的數。輸入 每組測試資料有兩行,第一行有兩個數n,m 0 include using namespace std bool cmp int x,int y int main 初始化,將每個...
a b 九度教程第60題
這是一例典型的考察高精度整數的題,其輸入非常巨大 1000 位 不能使用任何整數型別來直接儲存它。使用c c 首先明確高精度整數的儲存形式,常用如下結構體來儲存乙個高精度整數 struct biginteger 其中digit陣列用來儲存大整數中每若干位的數字,這裡暫且使用每4位為乙個單位儲存,si...
採藥 九度教程第 101 題
首先將這個問題抽象 有乙個容量為 v 的揹包,和一些物品。這些物品分別有兩個屬性,體積 w 和價值 v,每種物品只有乙個。要求用這個揹包裝下價值盡可能多的物品,求該最大價值,揹包可以不被裝滿。因為最優解中,每個物品都有兩種可能的情況,即在揹包中或者不存在 揹包中有 0 個該物品或者 1 個 所以把這...