C++ 用c+计算周日+;;

C++ 用c+计算周日+;;,c++,C++,你会得到以下信息,但你可能更愿意自己做一些研究 1900年1月1日是星期一。三十天有九月、四月、六月和十一月。其余的都有三十一个,仅二月一个就有二十八个,风雨无阻。闰年是29岁。闰年发生在任何可以被4整除的年份,但除非它可以被400整除,否则不会发生在一个世纪。 在二十世纪(1901年1月1日至2000年12月31日),有多少个星期日是在一个月的第一天 我似乎没有得到正确的答案或找到错误。我得到了答案 int main(){ int month[12]={31,0,31,30,31,30

你会得到以下信息,但你可能更愿意自己做一些研究

1900年1月1日是星期一。三十天有九月、四月、六月和十一月。其余的都有三十一个,仅二月一个就有二十八个,风雨无阻。闰年是29岁。闰年发生在任何可以被4整除的年份,但除非它可以被400整除,否则不会发生在一个世纪。 在二十世纪(1901年1月1日至2000年12月31日),有多少个星期日是在一个月的第一天

我似乎没有得到正确的答案或找到错误。我得到了答案

int main(){
    int month[12]={31,0,31,30,31,30,31,31,30,31,30,31};
    int j=0;
    int i= 1901;
    int day=1;
    int sunday=0;

    for(i=1901;i<2001;i++) {

        if( i % 4==0 ){
             month[1]=29;
        }
        else {
            month[1]=28;
        }

        for (j=0;j<12;j++){

            if (day % 7 ==0){
                sunday++;
            }
            day+=month[j];
            j++;
        }
    }
    cout<< sunday<<endl;
    cin.ignore();
    return 0;
}
intmain(){
整月[12]={31,0,31,30,31,30,31,30,31,31};
int j=0;
int i=1901;
整日=1;
int sunday=0;

对于(i=1901;i

),假定二十世纪的正常定义是从1月-1900年到31-DEC-1999,考虑将循环改变为<代码>(i=1900;i<2000;++i)< /C> > < /P> 如果需要范围为1901年1月1日至2000年12月31日,请注意1月1日- 1901年是星期二,因此

day
的起始值必须为2

您在每月迭代中也有一个虚假的
j++;
(acknowledge@NathanOliver)

除此之外,算法看起来还不错。虽然我不喜欢连续写

比他在文章中已经指出的内容,但你也每隔一个月跳过一次。在for循环中,你在循环结束时增加
j
,然后在下一个月开始时再次增加
j
循环

for (j=0;j<12;j++){
    if (day % 7 ==0){
        sunday++;

    }
    day+=month[j];
    j++;<--------------get rid of this
}

for(j=0;j初始值似乎编码为Jan 1 1901=Monday,但说明是Jan 1 1900=Monday。@Bathsheba愚弄了我。我删除了我的评论。你在循环中增加了两次
j
。(而且你的换行键似乎经常卡住。)是的,谢谢,问题实际上是j增加了两次……我把一年的初始值改为1900,所以日期改为1。但我仍然没有得到正确的答案。维基百科说是20世纪。人们忘记了没有0年。有1年,而在那之前的一年是公元前1年。我记得21世纪初的这场辩论图里。但我认为这是某些人在2000年12月31日狂欢的一个借口。是的,我知道我也修复了这个错误。抓到了你的
++j
,所以需要根据这些理由进行投票。@Bathsheba别忘了添加归因;)JK。你的答案看起来不错,我投了赞成票。