读书人

USACO friday 思路错了?解决思路

发布时间: 2012-10-12 10:17:04 作者: rapoo

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号具体的星期数,为啥不对啊



[解决办法]
你出错的地方不在这里,在别的地方。

C/C++ code
    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];                    }    } 

读书人网 >C++

热点推荐