洛谷 P1202 模拟 - 黑色星期五 Friday the Thirteenth
【題目描述】
13號又是一個星期五。13號在星期五比在其他日子少嗎?為了回答這個問題,寫一個程序,要求計算每個月的十三號落在周一到周日的次數(shù)。給出N年的一個周期,要求計算1900年1月1日至1900+N-1年12月31日中十三號落在周一到周日的次數(shù),N為正整數(shù)且不大于400.
這里有一些你要知道的:
1、1900年1月1日是星期一.
2、4,6,11和9月有30天.其他月份除了2月都有31天.閏年2月有29天,平年2月有28天.
3、年份可以被4整除的為閏年(1992=4*498 所以 1992年是閏年,但是1990年不是閏年).
4、以上規(guī)則不適合于世紀(jì)年。可以被400整除的世紀(jì)年為閏年,否則為平年。所以,1700,1800,1900和2100年是平年,而2000年是閏年.
請不要調(diào)用現(xiàn)成的函數(shù)
請不要預(yù)先算好數(shù)據(jù)(就是叫不準(zhǔn)打表)!
【輸入】
一個正整數(shù)n.
【輸出】
**輸出請從周六開始
【輸入樣例】
20
【輸出樣例】
36 33 34 33 35 35 34
【算法分析】
模擬。
1900年1月1日是星期一,所以1月2日是星期二,1月3是星期三……
1月8是8%7=1,星期一,以此類推。
求每個月13號,所以先有個基礎(chǔ)值13.
開個數(shù)組存每月幾天,然后模擬。
每一次統(tǒng)計完加上下個月份,
表示過了幾天,到了下個月的13號。
然后就用此數(shù)%7=x,統(tǒng)計數(shù)組[x]++。
輸出記得從周六開始。
【AC代碼】
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int n,sum,mark,day[7]; 5 int main() 6 { 7 8 int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 9 memset(day,0,sizeof(day)); 10 cin>>n; 11 sum+=13; 12 for(int i=1900;i<=1900+n-1;i++) 13 { 14 15 for(int j=1;j<=12;j++) 16 { 17 day[sum%7]++; 18 if(j==2) 19 if(i%400==0|| (i%100!=0 && i%4==0)) 20 {sum=sum+1;} 21 sum=sum+month[j]; 22 } 23 } 24 cout<<day[6]<<" "; 25 for(int i=0;i<=5;i++) cout<<day[i]<<" "; 26 return 0; 27 }?
轉(zhuǎn)載于:https://www.cnblogs.com/tyqEmptySet/p/10075846.html
總結(jié)
以上是生活随笔為你收集整理的洛谷 P1202 模拟 - 黑色星期五 Friday the Thirteenth的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSL证书的生成
- 下一篇: hive 小文件数据合并