USACO friday 思路错了?
计算每月13号是星期几:已知从1900、1、1日是星期一开始,计算1900至1900+n年之间,13号落在7个星期的次数
题目连接:http://hi.baidu.com/roc_wing/item/1d147f1265835f011894ec3b
我的代码:
[code=C/C++][/code]#include <iostream>
using namespace std;
int f(int n);
int main()
{
int n,mark,s,i,j;
int day[8]= {0},month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
cin>>n;
s=0;
for(i=0; i<n; i++)
{
if(f(1900+i)==1) //判断闰年,是闰年的话,二月加一
month[2]=29;
else
{
for(j=1; j<13; j++)
{
day[(s+13)%7]++;
s=s+month[j];
}
month[2]=28;
}
}
for(i=1; i<8; i++)
cout<<day[i]<<" ";
cout<<endl;
return 0;
}
int f(int n)
{
if((n%4==0&&n%100!=0)||n%400==0)
return 1;
else
return 0;
}
我知道我这儿错啦:
day[(s+13)%7]++;
s=s+month[j];
但不知道为啥错
我认为 把天数累加,再加上本月的13天,除于7的余数就是本月13号具体的星期数,为啥不对啊
[解决办法]
你出错的地方不在这里,在别的地方。
for(i=0; i<=n; i++) { if(f(1980+i)==1) //判断闰年,是闰年的话,二月加一 month[2]=29; else month[2]=28; for(j=1; j<13; j++) { day[(s+13)%7]++; s=s+month[j]; } }