P4956 [COCI 2017/2018 #6] Davor
题目描述
成功征服南极后,Davor 正在为新的挑战做准备。接下来是前往西伯利亚、格陵兰和挪威的北极探险。他将于 2018 年 12 月 31 日开始旅行,并需要在此之前筹集 N N N 库纳(克罗地亚货币)。为此,他决定每周一存入 X ( X ≤ 100 ) X(X ≤ 100) X(X≤100) 库纳到他的旅行基金中,每周二存入 X + K X + K X+K 库纳,每周三存入 X + 2 × K X + 2\times K X+2×K 库纳,依此类推,直到周日,他将存入 X + 6 × K X + 6\times K X+6×K 库纳。这样,他将在 52 周内筹集资金,从 2018 年 1 月 1 日(星期一)开始,直到 2018 年 12 月 30 日(星期日)为止。
如果我们知道金额 N N N,输出值 X X X 和 K K K,以便可以在给定的时间范围内收集到准确的金额。解决方案总是存在的,如果有多个,输出 X X X 最大且 K K K 最小的那个。
输入格式
输入的第一行包含整数 N ( 1456 ≤ N ≤ 145600 ) N(1456 \le N \le 145600) N(1456≤N≤145600),这是任务中的数字。
输出格式
输出的第一行必须包含 X X X 的值 ( 0 < X ≤ 100 ) (0 < X \le 100) (0<X≤100),第二行包含 K K K 的值 ( K > 0 ) (K > 0) (K>0)。
输入输出样例 #1
输入 #1
1456
输出 #1
1
1
**输入输出样例 #**2
输入 #2
6188
输出 #2
14
1
输入输出样例 #3
输入 #3
40404
输出 #3
99
4
说明/提示
题面翻译由 ChatGPT-4o 提供。
思路分析及代码
本题的数量关系是52*(7x+(1+2+3+4+5+6)k)==n
x 的范围可知是(0,100],且题中要求得到结果是x最大的,所以从大到小遍历,可用for x in range(100,0,-1)
k的范围未知,应该用while循环,如果52(7x+(1+2+3+4+5+6)*k)的结果已经大于n了,就没必要再遍历下去了。而当满足条件==n时,就可以输出结果了,此时除了跳出k的循环,还要跳出x的循环。多加一个flag变量标记是否找到结果,在外循环中判断flag的值,如果= = 1,说明已经找到结果了,可以跳出x的循环。
n=int(input())
flag=0
for x in range(100,0,-1):
k=1
while True:
if 52*(7*x+(1+2+3+4+5+6)*k)>n:
break
if 52*(7*x+(1+2+3+4+5+6)*k)==n:
print(x)
print(k)
flag=1
break
k+=1
if flag==1:
break

734

被折叠的 条评论
为什么被折叠?



