USACO friday 思路错了?

hedafighter2011 2012-09-26 11:01:48
计算每月13号是星期几:已知从1900、1、1日是星期一开始,计算1900至1900+n年之间,13号落在7个星期的次数
题目连接:http://hi.baidu.com/roc_wing/item/1d147f1265835f011894ec3b
我的代码:
#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号具体的星期数,为啥不对啊

...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hedafighter2011 2012-09-27
  • 打赏
  • 举报
回复
蒽蒽[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:

就是计算n年的啊, i=1;i<=n 或者 i=0;i<n 啊,应该没错吧

抱歉 我题目说错了 应该是计算1900年到1900+n-1之间的。。。。

引用 1 楼 的回复:
你出错的地方不在这里,在别的地方。
C/C++ code
for(i=0; i<=n; i++)
{
if(f(1980+i)==1) //判断闰年,是闰年……
[/Quote]
zhaoZero41 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

就是计算n年的啊, i=1;i<=n 或者 i=0;i<n 啊,应该没错吧

抱歉 我题目说错了 应该是计算1900年到1900+n-1之间的。。。。

引用 1 楼 的回复:
你出错的地方不在这里,在别的地方。
C/C++ code
for(i=0; i<=n; i++)
{
if(f(1980+i)==1) //判断闰年,是闰年的话,二月加一
month[2……
[/Quote]

那就按照之前的那个写就行了,我当时用的是n=0去进行测试的。
hedafighter2011 2012-09-26
  • 打赏
  • 举报
回复
就是计算n年的啊, i=1;i<=n 或者 i=0;i<n 啊,应该没错吧

抱歉 我题目说错了 应该是计算1900年到1900+n-1之间的。。。。

[Quote=引用 1 楼 的回复:]
你出错的地方不在这里,在别的地方。
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……
[/Quote]
hedafighter2011 2012-09-26
  • 打赏
  • 举报
回复
不过,提交测试数据n=2时过不了的:

USER: 珊珊 魏 [90girlf1]
TASK: friday
LANG: C++

Compiling...
Compile: OK

Executing...
> Run 1: Execution error: Your program did not produce an answer
that was judged as correct. The program stopped at 0.000 seconds;
it used 3340 KB of memory.

Here are the respective outputs:
----- our output ---------
2_1_1_3_1_2_2
---- your output ---------
4_3_2_4_4_3_4_
--------------------------

------ Data for Run 1 [length=2 bytes] ------
1
----------------------------


[Quote=引用 1 楼 的回复:]
你出错的地方不在这里,在别的地方。
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……
[/Quote]
hedafighter2011 2012-09-26
  • 打赏
  • 举报
回复
蒽蒽,不该出的错误,[Quote=引用 1 楼 的回复:]

你出错的地方不在这里,在别的地方。
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; ……
[/Quote]
zhaoZero41 2012-09-26
  • 打赏
  • 举报
回复
你出错的地方不在这里,在别的地方。
	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];
}
}

循环处应改为<=,否则就会少算一年。if...else...也要改成如上代码的格式,否则碰到闰年时不会进行计算。

for(i=0; i<7; i++)
cout<<day[i]<<" ";


输出结果地方也要从0开始循环。day[(s+13)%7]++; 余数的范围是0~6,那么day数组记录的下标当然也就是0~6了。
别的地方没什么问题,我测试了下结果也是对的。day[0]表示周日的天数,day[1]表示周一的天数,依次类推。。。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧