第五届“传智杯”全国大学生计算机大赛(练习赛)[传智杯 #5 练习赛] 时钟

[传智杯 #5 练习赛] 时钟

题目描述

你有一个电子钟,可以显示 0:0023:59 之间的所有时间,以数字的形式显示。其中小时是 023(0 时会显示一个 0,而 1 到 9 时不会显示前导 0),分钟是 0059(0 到 9 分都会显示前导 0)。任何时刻,电子钟都会显示三个或者四个 0 009 99 的数字。如果在某时刻,这些数字依次组成了一个等差数列,则这个时刻被称为“好时刻”。

你感觉很无聊,从 0:00 时刻开始盯着这个电子钟。一共盯了 x xx 分钟。请问整个过程中,"好时刻"来临了多少次(算上开头和结尾)?

输入格式

一个不超过 1 0 9 10^9109 的非负整数。

输出格式

请输出"好时刻"来临了多少次?

样例 #1

样例输入 #1

120

样例输出 #1

10

样例 #2

样例输入 #2

2880

样例输出 #2

79

样例 #3

样例输入 #3

987654321

样例输出 #3

26748975

提示

【样例解释】

你观察了 2 个小时,其中这些“好时刻”来临了:

0:00
0:12
0:24
0:36
0:48
1:11
1:23
1:35
1:47
1:59

一共是 10 个。

题解

#include<stdio.h>

int main(){
	int hour,minute,one,two,three,four,time,cir,mod,num = 0;
	scanf("%d",&time);
	cir = time/1440;
	mod = time%1440;
	num += cir*39;
	hour = mod/60;
	minute = mod%60;
	if(hour<10){
		one = hour;
		two = minute/10;
		three = minute%10;
		for(int i=0;i<one;i++){
			for(int j=0;j<=5;j++){
				for(int k=0;k<=9;k++){
					if(k-j==j-i){
						num++;
					}
				}
			}
		}
		for(int j=0;j<two;j++){
			for(int k=0;k<=9;k++){
				if(k-j==j-one){
					num++;
				}
			}
		}
		for(int k=0;k<=three;k++){
			if(k-two==two-one){
				num++;
			}
		}
	}else{
		num += 34;
		one = hour/10;
		two = hour%10;
		three = minute/10;
		four = minute%10;
		for(int i=1;i<one;i++){
			for(int j=0;j<=3;j++){
				for(int k=0;k<=5;k++){
					for(int l=0;l<=9;l++){
						if(l-k==k-j && k-j == j-i){
							num++;
						}
					}
				}
			}
		}
		for(int j=0;j<two;j++){
			for(int k=0;k<=5;k++){
				for(int l=0;l<=9;l++){
					if(l-k==k-j && k-j == j-one){
						num++;
					}
				}
			}
		}
		for(int k=0;k<three;k++){
			for(int l=0;l<=9;l++){
				if(l-k==k-two && k-two == two-one){
					num++;
				}
			}
		}
		for(int l=0;l<=four;l++){
			if(l-three==three-two && three-two == two-one){
				num++;
			}
		}
	}
	printf("%d",num);
	return 0;
}

在这里插入图片描述


版权声明:本文为L6666688888原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。