首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

USACO friday 思路错了?解决思路

2012-10-12 
USACO friday思路错了?计算每月13号是星期几:已知从1900、1、1日是星期一开始,计算1900至1900+n年之间,13号

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];                    }    } 

热点排行