USACO:Section 1.1 Friday the Thirteenth

本文介绍了一个使用C++实现的程序,该程序可以计算从1900年开始N年内每个月13号落在星期五的次数。通过判断是否为闰年,并结合不同月份天数的变化,最终输出各星期五出现的频率。

/* ID:lwj13961 TASK:friday LANG: C++ */ #include<iostream> #include<fstream> #include<cassert> using namespace std; bool isleapyear(int year) { if(year%100!=0&&year%4==0) return true; if(year%100==0&&year%400==0) return true; return false; } int main() { int N; int fre[7]={0}; int normalyear[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int leapyear[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; int *pyear; int days=0; //////////////////////////////////////get input char *ifs_file_name = "friday.in"; /* input file name */ ifstream ifs; /* create ifstream object */ ifs.open (ifs_file_name); /* open ifstream */ if (!ifs) { cerr << "\nERROR : failed to open input file " << ifs_file_name << endl; exit (EXIT_FAILURE); } ifs>>N; assert(N>=0&&N<=400); ifs.close (); /* close ifstream */ ////////////////////////////////////// for(int i=0;i<N;i++) { if(isleapyear(1900+i)) { pyear=leapyear; cout<<1900+i<<" 闰年 "; } else pyear=normalyear; for(int j=0;j<12;j++) { int t; if(j>0) { days += pyear[j-1]; t=(days+13)%7; } else { if(i>0) days += 31; t=(days+13)%7; } fre[t]++; //cout<<1900+i<<"年 "<<j+1<<" 月13号是星期"<<t<<endl; } } //////////////////////////////////////make ouput char *ofs_file_name = "friday.out"; /* output file name */ ofstream ofs; /* create ofstream object */ ofs.open (ofs_file_name); /* open ofstream */ if (!ofs) { cerr << "\nERROR : failed to open output file " << ofs_file_name << endl; exit (EXIT_FAILURE); } ofs<<fre[6]; for(int i=0;i<6;i++) ofs<<" "<<fre[i]; ofs<<endl; ofs.close (); /* close ofstream */ ////////////////////////////////////// getchar();getchar(); return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值