题解 AT54 【割り切れる日付】
水题
但是被卡了很久
提要
找出离输入时间最近的整除日。一天一天枚举就行了。另外还要判断新月和新年。
已有的四篇题解都是用for来循环,外加月份输出特判;其实没必要那么深奥:
创新之处
1.使用while循环,专为喜爱暴力枚举的你打造。
2.全新输出方法,再也不用为特判烦恼啦!
cout<<y<<'/'<<m/10<<m%10<<'/'<<d/10<<d%10<<endl;
我们以1000年10月1日为例:
输出y:1000
输出/:1000/
输出m/10,10/10=1:1000/1
输出m%10,10%10=0:1000/10
输出/:1000/10/
输出d/10,1/10=0:1000/10/0
输出d%10,1%10=1:1000/10/01
代码
#include<bits/stdc++.h>
using namespace std;
int y,m,d,t;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//前面没开数组结果被整到怀疑人生,在此提醒各位,数组还是要开的。
char ch;
bool leap(int year)//闰年
{
return (!(year%4)&&year%100||!(year%400));
}
int main()
{
cin>>y>>ch>>m>>ch>>d;
if (leap(y))
a[2]++;
while (y%(d*m))//如果不是整除日,就继续枚举
{
++d;
if (d>a[m])
{
m++;
d=1;
}
if (m>12)
{
++y;
m=1;
}
}
cout<<y<<'/'<<m/10<<m%10<<'/'<<d/10<<d%10<<endl;//输出别忘换行
return 0;
}
熬了三天才AC啊,体谅一下我的辛苦吧!