问题描述
2022 年 2 月 22 日 22:20 是一个很有意义的时间,
年份为 2022,由 3 个 2 和 1 个 0 组成,
如果将月和日写成 4 位,为 0222,也是由 3 个 2 和 1 个 0 组成,
如果将时间中的时和分写成 4 位,还是由 3 个 2 和 1 个 0 组成。
小蓝对这样的时间很感兴趣,他还找到了其它类似的例子,比如 111 年 10 月 11 日 01:11,2202 年 2 月 22 日 22:02 等等。
请问,总共有多少个时间是这种年份写成 4 位、月日写成 4 位、时间写成4 位后由 3 个一种数字和 1 个另一种数字组成。注意 1111 年 11 月 11 日11:11不算,因为它里面没有两种数字。
解题思路 首先观察题目发现无需判断闰年,因为当日到29,无法构成合法的日期 如2229和9929,年也无需判断 我们开了一个含4个int数组,每个数字不超过9,无需担心年份的大小问题。我想便利每一种情况,判断时间的合理性,
时间复杂度较低,合理的时间记录下来,根据count=合法的年的个数*合法的月日的个数*合法的小时分钟个数得到结果
答案是212
1 #include <iostream> 2 int num[4],count; 3 using namespace std; 4 void check(int &y, int &m, int &h){ 5 int year = num[0] * 1000 + num[1] * 100 + num[2] * 10 + num[3]; 6 int month = num[0] * 10 + num[1]; 7 int day = num[2] * 10 + num[3]; 8 int hour = month; 9 int minute = day; 10 if(year > 0 && year<=9999) 11 y++; 12 if(month > 0 && month < 13 && day > 0 && day < 31) 13 m++; 14 if(hour > 0 && hour < 25 && minute >= 0 && minute < 60) 15 h++; 16 } 17 int main() 18 { 19 for (int i = 0; i < 10; i++) 20 { 21 for (int j = 0; j < 10; j++) 22 { 23 if(i == j) continue; 24 int y = 0, m = 0, h = 0; 25 for (int k = 0; k < 4; k++) 26 { 27 num[k] = i; 28 num[(k + 1) % 4] = num[(k + 2) % 4] = num[(k + 3) % 4] = j; 29 check(y, m, h); 30 } 31 count += y * m * h; 32 } 33 } 34 cout<<count<<endl; 35 return 0; 36 }
标签:11,10,22,int,c++,蓝桥,错题,num,&& From: https://www.cnblogs.com/jszs0013/p/17069396.html