题目1434:蓝桥杯历届试题-回文数字
题目描述:3s 内存限制:192MB
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
输入格式:一个正整数 n (10< n< 100), 表示要求满足的数位和。
输出格式:若干行,每行包含一个满足要求的5位或6位整数。 数字按从小到大的顺序排列。 如果没有满足条件的,输出:-1
样例输入:44
样例输出:
99899 499994 589985 598895 679976 688886 697796 769967 778877 787787 796697 859958 868868 877778 886688 895598 949949 958859 967769 976679 985589 994499
题解:
n = int(input())
flag = False
for i in range(1,10):
for j in range(0,10):
k = n-2*i-2*j
if k >= 0 and k<10:
# print(i,j,k,j,i)
print(i * 10000 + j * 1000 + k * 100 + j * 10 + i)
flag = True
for i in range(1,10):
for j in range(0,10):
k = n-2*i-2*j
if (k %2 == 0 and k//2<10) and k//2 >= 0:
# print(i,j,k//2,k//2,j,i)
print(i*100000+j*10000+(k//2)*1000+(k//2)*100+j*10+i)
flag = True
if flag == False:
print(-1)
解题思路:优化后两重循环即可,无需暴力枚举,降低时间复杂度。
题目1431:蓝桥杯2014年第五届真题-分糖果
时间限制: 3s 内存限制: 192MB
题目描述:
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式:程序首先读入一个整数N(2< N< 100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式:要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入:
3 2 2 4
样例输出:
4
题解:
n=int(input())
l=list(map(int,input().split()))
candy=0
while True:
t=[i//2 for i in l]
k=t[:]
t=t[-1:]+t[:-1]
l=[t[i]+k[i] for i in range(n)]
for j in range(n):
if l[j]%2 !=0:
l[j] += 1
candy += 1
p=n-1
for i in range(1,n):
if l[i] == l[0]:
p -= 1
if p == 0:
break
print(candy)