日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯 日期计算

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯 日期计算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法提高 日期計算 ? 時間限制:1.0s ? 內存限制:256.0MB ???? 問題描述 已知2011年11月11日是星期五,問YYYY年MM月DD日是星期幾?注意考慮閏年的情況。尤其是逢百年不閏,逢400年閏的情況。 輸入格式 輸入只有一行
  YYYY MM DD 輸出格式 輸出只有一行
  W 數據規模和約定 1599 <= YYYY <= 2999
  1 <= MM <= 12
  1 <= DD <= 31,且確保測試樣例中YYYY年MM月DD日是一個合理日期
  1 <= W <= 7,分別代表周一到周日 樣例輸入 2011 11 11 樣例輸出 5


1.找到一個參照,題中可知2011/11/11為周五,所以2011/11/13為周日,取2011/11/13參照,因為這樣更好算。
?2.分析可知總共有如下幾種情況:
1.年份大于2011
2.年份小于2011
3.年份等于2011(日期又分為比11/13大的和小于等于11/11的)
?3.分情況寫出代碼,主要是日期總數的計算容易出錯,其中包括閏年的判斷。


個人水平有限,寫的代碼有點長,以后有能力希望能簡化,多多指教


<span style="font-size:18px;">/*Name: 計算日期 Copyright: Author: styDate: 15/2/9 14:23Description:題目不難,就是有點繁瑣,容易出錯 */#include<stdio.h>//判斷該日期為該年中的第多少天 int count(int year, int month, int day) {int sum = 0;int a[][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};int b = 0;if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){b = 1;}sum = day;for (int i = 0; i < month - 1; i++){sum += a[b][i];}return sum; }void fun1(int year, int month, int day) {int sum = 0;int date = 7;int i;sum = count(2011, 12, 31) - count(2011, 11, 13);for (i = 2012; i < year; i++){sum += count(i, 12, 31); }sum += count(year, month, day); //得到總天數int temp = sum % 7; if (temp == 0){date +=temp;}else{date = (date + temp) % 7;}printf("%d\n", date); }void fun2(int year, int month, int day) {int sum = 0;int i;int date = 7;sum = count(2011, 11, 13);for (i = 2010; i > year; i--){sum += count(i, 12, 31); }sum += (count(year, 12, 31) - count(year, month, day)); //得到總天數int temp = sum % 7;//printf("ad\n");if (temp == 0){date +=temp;}else{date = 7 - (date + temp) % 7; //注意此處用7減去}printf("%d\n", date); }int main() {int year, month, day;int sum = 0;int i, j;int date = 7;int temp;scanf("%d%d%d", &year, &month, &day);//計算大于2011年的日期if (((year > 2011) && (year <= 2999)) && ((month >= 1) && (month <= 12)) && ((day >= 1) && (day <= 31))){fun1(year, month, day);}//計算小于2011年的日期if (((year >= 1599) && (year < 2011)) && ((month >= 1) && (month <= 12)) && ((day >= 1) && (day <= 31))){fun2(year, month, day);}//計算等于2011年的,又可以分成兩部分if ((year == 2011) && ((month >= 1) && (month <= 12)) && ((day >= 1) && (day <= 31))){if (month >= 11 && day >= 13){sum = count(year, month, day) - count(2011, 11, 13);temp = sum % 7;if (temp == 0){date +=temp;}else{date = (date + temp) % 7;}printf("%d\n", date);}else{sum = count(2011, 11, 13) - count(year, month, day);temp = sum % 7;if (temp == 0){date +=temp;}else{date = 7 - (date + temp) % 7; //注意此處用7減去}printf("%d\n", date);}}return 0; }</span> 最后帶入相應區間的數進行檢驗十分有必要


總結

以上是生活随笔為你收集整理的蓝桥杯 日期计算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。