如果不知道什么是世界完全对称日地去这里
要求输入一个开始年份a一个结束年份b,输出a~b之间的世界完全对称日。
初步过程图:
- 输入开始年份和结束年份
- 计算世界完全对称日
- 输出
宏:
#include<bits/stdc++.h>//万能头
using namespace std;
输入函数:
void In()//输入
{
int a,b;//开始年份,结束年份
cin>>a>>b;
Begin=a,End=b;
}
计算函数:
string Reverse(string str)//反转函数
{
reverse(str.begin(),str.end());
return str;
}
int MouthDay(int year,int mouth)//返回每月多少天
{
switch(mouth)
{
case 1:return 31;
case 2:return (!(year%4)&&(year%100)||!(year%400))?29:28;
case 3:return 31;
case 4:return 30;
case 5:return 31;
case 6:return 30;
case 7:return 31;
case 8:return 31;
case 9:return 30;
case 10:return 31;
case 11:return 30;
case 12:return 31;
}
}
string ToStringANDPlusZero(int num)//int转string和添0(如1010/1/1->1010/01/01)
{
string str="";
while(num)
{
str+=char(num%10+'0');
num/=10;
}
str=Reverse(str);
if(str.size()<=1)str='0'+str;
return str;
}
int ReverseDayTraverse()//遍历
{
int sum=0;
for(int year=Begin;year<=End;year++)
for(int mouth=1;mouth<=12;mouth++)
for(int day=1;day<=MouthDay(year,mouth);day++)
{
string str=ToStringANDPlusZero(year)+ToStringANDPlusZero(mouth)+ToStringANDPlusZero(day);
if(Reverse(str)==str)
{
sum++;
OutDay(ToStringANDPlusZero(year),ToStringANDPlusZero(mouth),ToStringANDPlusZero(day));
}
}
return sum;
}
输出函数:
void OutDay(string year,string mouth,string day)
{
cout<<year<<"/"<<mouth<<"/"<<day<<endl;
}
完整Code:
#include<bits/stdc++.h>
using namespace std;
class ReverseDay
{
public:
void In()
{
int a,b;
cin>>a>>b;
Begin=a,End=b;
}
void OutDay(string year,string mouth,string day)
{
cout<<year<<"/"<<mouth<<"/"<<day<<endl;
}
string Reverse(string str)
{
reverse(str.begin(),str.end());
return str;
}
int MouthDay(int year,int mouth)
{
switch(mouth)
{
case 1:return 31;
case 2:return (!(year%4)&&(year%100)||!(year%400))?29:28;
case 3:return 31;
case 4:return 30;
case 5:return 31;
case 6:return 30;
case 7:return 31;
case 8:return 31;
case 9:return 30;
case 10:return 31;
case 11:return 30;
case 12:return 31;
}
}
string ToStringANDPlusZero(int num)
{
string str="";
while(num)
{
str+=char(num%10+'0');
num/=10;
}
str=Reverse(str);
if(str.size()<=1)str='0'+str;
return str;
}
int ReverseDayTraverse()
{
int sum=0;
for(int year=Begin;year<=End;year++)
for(int mouth=1;mouth<=12;mouth++)
for(int day=1;day<=MouthDay(year,mouth);day++)
{
string str=ToStringANDPlusZero(year)+ToStringANDPlusZero(mouth)+ToStringANDPlusZero(day);
if(Reverse(str)==str)
{
sum++;
OutDay(ToStringANDPlusZero(year),ToStringANDPlusZero(mouth),ToStringANDPlusZero(day));
}
}
return sum;
}
void Code()
{
In();
int sum=ReverseDayTraverse();
if(sum>0)printf("%d年到%d年间有%d个世界完全对称日",Begin,End,sum);
else printf("%d年到%d年间没有世界完全对称日",Begin,End);
}
private:
int Begin,End;
};
ReverseDay ReverseDayS;
int main()
{
ReverseDayS.Code();
return 0;
}