黑色星期五(第一题)
常常觉得自己的算法很烂,从基础学起。下面这道题是第一题:不管哪个月的13日又恰逢星期五就叫 “ 黑色星期五 ” 。找出并输出黑色星期五。
以下是我的程序:
#include<iostream>
using namespace std;
bool isDateRight(int year,int month,int day)//本想写来判断输入的日期是否是对了,看来是多余的。
{
if(year < 1 || (month < 1 && month > 12) || (day < 1 && day > 31))
return false;
return true;
}
bool isBlackFriday(int year,int month,int day)//用了蔡勒(Zeller)公式,所以很容易得出日期。
{
int y,c,temp;
y = year % 100;
c = year / 100 ;
temp = y + y/4 + c/4 - 2*c + 26*(month+1)/10 + day - 1;
if(temp == 5)
return true;
return false;
}
int main()
{
int Startyear = 0,Endyear = 0;
cout<<"请输入你要查询的年份"<<endl;
cout<<"开始年份:"<<endl;
cin>>Startyear;
cout<<"结束年份:"<<endl;
cin>>Endyear;
if(Endyear < Startyear)
{
cout<<"结束年份不能比开始年份小"<<endl;
return 1;
}
for (int year = Startyear ; year <= Endyear ; year++)
{
for (int month = 1 ; month <= 12; month++)
{
if( isBlackFriday(year,month,13))
{
cout<<"黑色星期五的日子是:"<<year<<" 年 "<<month<<" 月 " <<13<<" 日"<<endl;
}
}
}
return 0 ;
}
但是上面的程序还不是完整的,若是我想要再次输入呢?那就不满足条件了,所以我将程序修改如下:
do {
cout<<"请输入你要查询的年份"<<endl;
cout<<"开始年份:"<<endl;
cin>>Startyear;
cout<<"结束年份:"<<endl;
cin>>Endyear;
if(Endyear < Startyear)
{
cout<<"结束年份不能比开始年份小"<<endl;
cout<<"请你重新输入.............."<<endl;
continue;;
}
for (int year = Startyear ; year <= Endyear ; year++)
{
for (int month = 1 ; month <= 12; month++)
{
if( isBlackFriday(year,month,13))
{
cout<<"黑色星期五的日子是:"<<year<<" 年 "<<month<<" 月 " <<13<<" 日"<<endl;
}
}
}
cout<<"你是要退出,请输入n,否则请输入:y"<<endl;
cin>>isLeave;
}while(isLeave == 'y');
这个程序还有很多的缺陷,以后有空会继续修改。
浙公网安备 33010602011771号