UASCO friday

有个思路很简单的方法:每个月的天数累加,累加得到的和sum + 13 ,然后除于7的余数即为本月星期数

关键就是这一步:同样的代码,第一次提交不过,第二次竟过了!不知肿么回事儿

for(j=1; j<13; j++)
        {
            day[(s+13)%7]++;
            s=s+month[j];
        }
然后注意判断闰年,加上外层循环n次就行啦  这是我的:

/*
ID: 90girlf1
PROG: friday
LANG: C++
*/

#include <iostream>
#include<fstream>
using namespace std;
int f(int n);
int main()
{
    ifstream fin("friday.in");
    ofstream fout("friday.out");
    int n,mark,s,i,j;
    int day[7]= {0},month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
   fin>>n;
    s=0;
    for(i=0; i<n; i++)
    {
        if(f(1900+i)==1) //判断闰年,是闰年的话,二月加一
            month[2]=29;
        else
            month[2]=28;

        for(j=1; j<13; j++)
        {
            day[(s+13)%7]++;
            s=s+month[j];
        }
    }
     fout<<day[6]<<" ";
    for(i=0; i<6; i++)
      fout<<day[i]<<" ";
   fout<<endl;
    return 0;
}

int f(int n)
{
    if((n%4==0&&n%100!=0)||n%400==0)
        return 1;

    else
        return 0;
}

这是别人的,我没看懂  呜呜~~~~(>_<)~~~~ :

/*
ID: 90girlf1
PROG: friday
LANG: C++
*/
#include <fstream>
#include<iostream>
using namespace std;

int day[7]={0};
int mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

bool inline IsLeap(int year){
    if((year%100!=0 && year%4==0)||year%400==0)
        return true;
    else
        return false;
}

int main(){
    int n,i,j,l=6;
    //ifstream fin("friday.in");
    //ofstream fout("friday.out");

    cin>>n;
    n+=1900;
    for(i=1900; i<n; ++i){
        if(IsLeap(i))
            mon[1]=29;
        for(j=0; j<12; ++j){
            day[l]++;
            l+=mon[j];
            l%=7;
        }
        mon[1]=28;
    }
    cout<<day[6];
    for(i=0;i<6;++i)
        cout<<" "<<day[i];
    cout<<endl;

    return 0;
}





你可能感兴趣的:(UASCO friday)