Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //题目:用户输入正整数n,n为正整数且不大于400。要求计算从1900年1月1日至1900+n-1年12月31日中13 号落在周一到周日的次数(已知1900年1月1日是星期一)。(可在网上以“黑色星期五 c++”为关键词检索到,是经典题目)我根据别人的代码自己重写了一遍,但是输出结果与原代码不同(原代码输出结果应为正确值),请uu们帮我看看哪里有问题,请予以指正。谢谢!
- #include<iostream>
- using namespace std;
- int main()
- {
- int m[13],n,d[8]={0},a=6;
- cin>>n;
- m[1]=m[3]=m[5]=m[7]=m[8]=m[10]=m[0]=31;
- m[2]=28;
- m[4]=m[6]=m[9]=m[11]=30;
- d[6]++;
- for(int i=0;i<n;i++){
- m[2]=28;
- if(((1900+i)%4==0&&(1900+i)%100!=0)||((1900+i)%4==400)){
- m[2]=29;
- }
- for(int j=1;j<=12;j++){
- if(i==0&&j==1){
- continue;
- }
- a=(a+m[j-1]%7)%7;
- if(a==0) {
- a+=7;
- }
- d[a]++;
- }
- }
- for(int i=1;i<=7;i++){
- cout<<d[i]<<" ";
- }
- return 0;
- }
- /*
- #include<cstdio>
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- int n,k=6;
- int day[10];
- int month[15];//这是我上网搜到的参考解答
- void fuzhi()
- {
- month[0]=31;
- month[1]=31;
- month[2]=28;
- month[3]=31;
- month[4]=30;
- month[5]=31;
- month[6]=30;
- month[7]=31;
- month[8]=31;
- month[9]=30;
- month[10]=31;
- month[11]=30;
- }
- int main()
- {
- memset(day,0,sizeof(day));
- //freopen("in.txt","r",stdin);
- scanf("%d",&n);
- day[6]++;//1900 1 13 星期六
- fuzhi();
- for(int i=0;i<n;i++)
- {
- month[2]=28;//重新更改2月的天数
- if ( ((1900+i)%4==0 &&(1900+i)%100!=0) ||(1900+i)%400==0)
- {
- month[2]=29;
- }
- for(int j=1;j<=12;j++)
- {
- if(i==0 && j==1) continue;
- k=(k+month[j-1]%7)%7; //计算本月的13为星期几
- if(k==0) k=7;
- day[k]++;
- }
- }
- for(int i=6;i<=7;i++)
- printf("%d ",day[i]);
- for(int i=1;i<=5;i++)
- printf("%d ",day[i]);
- return 0;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement