[COCI2017-2018#6] Davor
题面翻译
在征服南极之后,Davor 开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。他将在 2018 2018 2018 年 12 12 12 月 31 31 31 日开始出发,在这之前需要一共筹集 n n n 元钱。他打算在每个星期一筹集 x x x 元,星期二筹集 x + k x+k x+k 元,……,星期日筹集 x + 6 k x+6k x+6k 元,并连续筹集 52 52 52 个星期。其中 x , k x,k x,k 为正整数,并且满足 1 ≤ x ≤ 100 1 \le x \le 100 1≤x≤100。
现在请你帮忙计算 x , k x,k x,k 为多少时,能刚好筹集 n n n 元。
如果有多个答案,输出 x x x 尽可能大, k k k 尽可能小的。注意 k k k 必须大于 0 0 0。
样例 #1
样例输入 #1
1456
样例输出 #1
1
1
样例 #2
样例输入 #2
6188
样例输出 #2
14
1
样例 #3
样例输入 #3
40404
样例输出 #3
99
4
思路在代码中已写。
def cal_m(x,k):
#range(start,stop,step),开始,结束,步长
#sum 内置函数,直接求可迭代对象的和
week_m = sum(range(x,x+7*k,k))
return 52 * week_m
n = int(input())
#因为考虑到x尽可能大,就倒着计算
for x in range(100,0,-1):
#k的范围可以取消一点,k值太大的话增加训练时间,因为题目要求k<x的,故值在1,100
for k in range(1,101):
if cal_m(x,k) == n:
print(x)
print(k)
#此处的beak,找到解就退出循环
break
#如果在内层循环中,没有找到合适的k值,则进入外循环继续
#这里是一个for循环 + else的知识点,循环结束后后执行else代码,
#但如果循环中存在break不会在执行
else:
continue
#找到解之后同样退出外循环
break