審題:
本題需要我們判斷以八位數確定的日期范圍中是否存在回文數
思路:
方法一:枚舉法1.確定枚舉對象:
對象1:八位數日期,所需枚舉次數:10^8
對象2:年,所需枚舉次數:10^3
因為回文的特性,每一年只有一中特定的月日可以構成回文,所以我們只需要枚舉年,然后求出對應的月日是否合法與在數據范圍內,沒問題就answer++
對象三:月日,所需枚舉次數:372
我們枚舉月日,然后根據月日反推回文情況下的年,這種情況下的日期是合法的,此時我們再判斷是否在數據范圍內,在就answer++
2.確定枚舉順序:
由于本題一定需要枚舉所有情況,所以選擇順序即可
3.確定枚舉類型:
普通枚舉
解題:
?#include<iostream> using namespace std; int date1, date2; int day[] = {0,31,29,31,30,31,30,31,31,30,31,30,31}; int answer; int main() {cin >> date1 >> date2;for (int i = 1; i <= 12; i++)//月份{for (int j = 1; j <= day[i]; j++)//日{int year = j % 10 * 1e3 + j /10 * 1e2 + i % 10 * 10 + i / 10;int num = year * 1e4 + i * 1e2 + j;if (num <= date2 && num >= date1){answer++;}}}cout << answer;return 0; }
首先我們求出year:
根據回文特性,我們需要將日的最后一位放到年的第一位,所以取余求出日的最后一位后乘1000,日的最高位當年的第二位,除10之后乘100即可。月份求解同理
然后我們求出最終num:
將year乘10000放在八位數的前四位,剩下的月乘100,放在第五第六位,日就直接加上放在第七第八位
如果最后處于輸入的數據范圍內,answer++
記錄詳情 - 洛谷 | 計算機科學教育新生態