#### 演算法標籤:列舉,模擬
題目描述
在日常生活中,通過年、月、日這三個要素可以表示出乙個唯一確定的日期。
牛牛習慣用 8 位數字表示乙個日期,其中,前 4 位代表年份,接下來 2 位代表月份,最後 2 位代表日期。
顯然:乙個日期只有一種表示方法,而兩個不同的日期的表示方法不會相同。
牛牛認為,乙個日期是回文的,當且僅當表示這個日期的8位數字是回文的。
現在,牛牛想知道:在他指定的兩個日期之間(包含這兩個日期本身),有多少個真實存在的日期是回文的。
乙個 8 位數字是回文的,當且僅當對於所有的 i(1≤i≤8) 從左向右數的第i個數字和第 9−i 個數字(即從右向左數的第 i 個數字)是相同的。
例如:•對於2023年11月19日,用 8 位數字 20161119 表示,它不是回文的。
•對於2023年1月2日,用 8 位數字 20100102 表示,它是回文的。
•對於2023年10月2日,用 8 位數字 20101002 表示,它不是回文的。
輸入格式
輸入包括兩行,每行包括乙個8位數字。
第一行表示牛牛指定的起始日期date1,第二行表示牛牛指定的終止日期date2。保證date1和date2都是真實存在的日期,且年份部分一定為4位數字,且首位數字不為0。
保證date1一定不晚於date2。
輸出格式
輸出共一行,包含乙個整數,表示在date1和date2之間,有多少個日期是回文的。
輸入樣例:
20110101
20111231
輸出樣例:1
思路
直接暴力不可取。
本體是回文,我們可以直接在指定區間當中找,且利用回文特性大大壓縮暴力需要的範圍。
即 判斷所有四位數是否則區間內,且是否滿足日期條件。
cpp**
#include
using
namespace std;
int months=
;bool
check
(int date)
return
true;}
intmain()
cout<}
NOIP2016普及組 複賽 回文日期
題目自己點,複製過來會飛掉 這個題,當時想得太複雜,但沒想到竟然得了70分 真的不想說什麼 當時的思路 列舉每一天,然後開頭和末尾單獨處理,於是,洋洋灑灑寫了100多行。正確思路 列舉每一天 不要打我臉 當然方法不同,量也就50行,不難理解。第一步 輸入兩個int整數即可 因為只有8位 然後分離出它...
NOIP2016普及組 複賽 回文日期
題目自己點,複製過來會飛掉 這個題,當時想得太複雜,但沒想到竟然得了70分 真的不想說什麼 當時的思路 列舉每一天,然後開頭和末尾單獨處理,於是,洋洋灑灑寫了100多行。正確思路 列舉每一天 不要打我臉 當然方法不同,量也就50行,不難理解。第一步 輸入兩個int整數即可 因為只有8位 然後分離出它...
NOIP2016普及組第二題 回文日期
題目描述 牛牛習慣用8位數字表示乙個日期,其中,前4位代表年份,接下來2位代表月 份,最後2位代表日期。顯然 乙個日期只有一種表示方法,而兩個不同的日期的表 示方法不會相同。牛牛認為,乙個日期是回文的,當且僅當表示這個日期的8位數字是回文的。現 在,牛牛想知道 在他指定的兩個日期之間包含這兩個日期本...