2020年ブルーブリッジカップC/C++省試合B組第2戦G:回文日付
20737 ワード
【問題の説明】2020年の春節期間中、2020年2月2日という特別な日付が注目されました.この日付を「yyyyymmdd」の形式で8桁に書くと20200202となり、ちょうど1回の文数になるからです.私たちはこのような日付を返事の日付と呼んでいます.20200202は「千年に一度」という特別な日だという人もいる.これに対して明ちゃんはとても認めません.2年もしないうちに次の返事の日付です.20211202、2021年12月2日です.20200202は1つの返信日だけでなく、ABABBABA型の返信日でもあるという人もいます.これに対して明ちゃんも認めていません.約100年後に次のABABBABA型の返信日:21211212、2121年12月12日に出会うことができるからです.「千年に一度」ではなく、せいぜい「千年に二度」だ.8桁の日付を指定して、その日付の後に次の返信日と次のABABBABA型の返信日がそれぞれどの日なのか計算してください.
【入力形式】入力は、日付を表す8ビット整数Nを含む.
【出力形式】2行出力し、1行あたり8桁.1行目は次の返信日、2行目は次のABABBABA型の返信日を表します.【サンプル入力】
【サンプル出力】
【評価用例の規模と約定】すべての評価用例について、100000101≦N≦89991231であり、Nが合法的な日付の8桁の表示であることを保証する.コード:
この問題は次のとおりです.https://blog.csdn.net/weixin_45672809/article/details/109137199
皆さん、ありがとうございました.
【入力形式】入力は、日付を表す8ビット整数Nを含む.
【出力形式】2行出力し、1行あたり8桁.1行目は次の返信日、2行目は次のABABBABA型の返信日を表します.【サンプル入力】
20200202
【サンプル出力】
20211202
21211212
【評価用例の規模と約定】すべての評価用例について、100000101≦N≦89991231であり、Nが合法的な日付の8桁の表示であることを保証する.コード:
#include
#include
using namespace std;
int a[12]={
31,28,31,30,31,30,31,31,30,31,30,31};
bool isok(int x)//
{
if( x%400==0 ) return true;
if( x%100==0 ) return false;
if( x%4==0 ) return true;
return false;
}
int main()
{
int x;
cin >> x;
int year=x/10000;//
int month=x%10000/100;//
int day=x%100;//
int flag=0;
int m=year%10*10+year%100/10;//
int n=year/100%10*10+year/1000;//
if(isok(year)) a[1]=29;
else a[1]=28;
if((m>month&&m<13)||(m==month&&n>day&&n<=a[m-1])){
//
cout<<setw(2)<<setfill('0')<<year<<setw(2)<<setfill('0')<<m<<setw(2)<<setfill('0')<<n<<endl;//
flag=1;
if((year/1000!=year%10)&&(year%100==m%10*10+m/10)&&(m==n)){
// ABAB BABA
cout<<setw(2)<<setfill('0')<<year<<setw(2)<<setfill('0')<<m<<setw(2)<<setfill('0')<<n<<endl;
return 0;
}
}
while(year<=8999){
year++;
month=year%10*10+year%100/10;//
day=year/100%10*10+year/1000;//
if(month>12||day>31) continue;
if(isok(year)) a[1]=29;
else a[1]=28;
if((flag!=1)&&month>0&&month<13&&day>0&&day<=a[month-1]){
//
cout<<setw(2)<<setfill('0')<<year<<setw(2)<<setfill('0')<<month<<setw(2)<<setfill('0')<<day<<endl;
flag=1;
}
if((year/1000!=year%10)&&(year%100==month%10*10+month/10)&&(month==day)){
// ABABBABA
cout<<setw(2)<<setfill('0')<<year<<setw(2)<<setfill('0')<<month<<setw(2)<<setfill('0')<<day<<endl;
break;
}
}
return 0;
}
この問題は次のとおりです.https://blog.csdn.net/weixin_45672809/article/details/109137199
皆さん、ありがとうございました.