我在项目euler上尝试了问题19。答案是171,但我的代码给出了1199,这远远超出了预期的答案。有人可以告诉我哪里出错了吗? - 问题的链接在这里:https://projecteuler.net/problem=19
#include<stdio.h>
int main()
{
int count=2;
int flag1=0;
int flag2=0;
int month=1;
int day=1;
int year=1901;
int sunday=0;//count sundays
while(1)
{
//check for leapyears
if(year%4)
{
if((year%100==0 && year%400==0) || year%100!=0)
flag2=1;
}
//update months(31days)
if((month==1 ||month==3 || month==5 || month==7 || month==8 || month==10|| month==12) && day==31)
{
flag1=1;
day=1;
month++;
if(month==13)
{
month=1;
year++;
flag2=0;
}
}
//update months(30days)
if((month==4 || month==6 || month==9 || month==11) && day==30)
{
flag1=1;
day=1;
month++;
}
//update month:february
if(month==2)
{
if((flag2==0 && day==28) || (flag2==1 && day==29))
{
flag1=1;
day=1;
month=3;
}
}
//check sunday of every month
if(count%7==0 && flag1==1)
{
sunday++;
flag1=0;
}
count++;
day++;
if(year==2001)
break;
}
printf("%d\n",sunday);
return 0;
}
答案 0 :(得分:-1)
有三件事是错的。
if(year%4)
必须为if (year%4==0)
。count
天。flag1
,即使这不是在当月的第一天。后两个错误可以纠正如下:
count += flag1; // account for extra day step
if (count%7==0 && flag1) sunday++;
flag1 = 0; // reset `first of month` flag for this month