逐日一题洛谷P8716 [蓝桥杯 2020 省 AB2] 回文日期c++

打印 上一主题 下一主题

主题 1634|帖子 1634|积分 4902


方法有挺多的,比如说先枚举日期再判定是不是回文数,或者先枚举回文数再判定日期是否合法等等。
讲一下作者采用的方法。八位数,如果要是回文数,至少应该是ABCDDBCA,A有9种,B、C、D有10种,以是最多只要枚举9*10*10*10个数字就能出答案。
  1. #include<iostream>
  2. using namespace std;
  3. bool DAY(int n) {
  4.         int year = n / 10000;
  5.         int month = (n % 10000) / 100;
  6.         if (month > 12 || month < 1)return false;
  7.         int day = n % 100;
  8.         if (day > 31 || day < 1)return false;
  9.         if (month == 2 || month == 4 || month == 6 || month == 9 || month == 11) {
  10.                 if (day > 30)return false;
  11.         }
  12.         int flag = 0;
  13.         if (year % 100 != 0) {
  14.                 if (year % 4 == 0)flag = 1;
  15.         }
  16.         else {
  17.                 if (year % 400 == 0)flag = 1;
  18.         }
  19.         if (!flag) {
  20.                 if (month == 2) {
  21.                         if (day > 28)return false;
  22.                 }
  23.         }
  24.         return true;
  25. }
  26. int main() {
  27.         int n;
  28.         cin >> n;
  29.         int a = n / 10000000 % 10;
  30.         int b = n / 1000000 % 10;
  31.         int c = n / 100000 % 10;
  32.         int d = n / 10000 % 10;
  33.         while (1) {
  34.                 int sum = a * 10000000 + b * 1000000 + c * 100000 + d * 10000 + d * 1000 + c * 100 + b * 10 + a;
  35.                 if (sum > n && DAY(sum)) {
  36.                         cout << sum << endl;
  37.                         break;
  38.                 }
  39.                 else {
  40.                         d++;
  41.                         if (d > 9) { d = 0; c++; }
  42.                         if (c > 9) { c = 0; b++; }
  43.                         if (b > 9) { b = 0; a++; }
  44.                 }
  45.         }
  46.         while (1) {
  47.                 int sum = a * 10000000 + b * 1000000 + a * 100000 + b * 10000 + b * 1000 + a * 100 + b * 10 + a;
  48.                 if (sum > n && DAY(sum)) {
  49.                         cout << sum << endl;
  50.                         break;
  51.                 }
  52.                 b++;
  53.                 if (b > 9) { b = 0; a++; }
  54.         }
  55.         return 0;
  56. }
复制代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表