python洛谷做题32:P4956 [COCI 2017/2018 #6] Davor

P4956 [COCI 2017/2018 #6] Davor

题目描述

成功征服南极后,Davor 正在为新的挑战做准备。接下来是前往西伯利亚、格陵兰和挪威的北极探险。他将于 2018 年 12 月 31 日开始旅行,并需要在此之前筹集 N N N 库纳(克罗地亚货币)。为此,他决定每周一存入 X ( X ≤ 100 ) X(X ≤ 100) X(X100) 库纳到他的旅行基金中,每周二存入 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(1456N145600),这是任务中的数字。

输出格式

输出的第一行必须包含 X X X 的值 ( 0 < X ≤ 100 ) (0 < X \le 100) (0<X100),第二行包含 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
(7
x+(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值