(python)征服南极之后,Davor 开始了一项新的挑战 P4956 [COCI2017-2018#6] Davor

文章讲述了Davor面临的筹资挑战,要在52周内筹集一定金额,每周按特定规律递增。代码展示了如何计算出x(初始金额)和k(递增值)的组合,使得总金额恰好等于给定数值,优先考虑x的最大值和k的最小值。
摘要由CSDN通过智能技术生成

[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 1x100

现在请你帮忙计算 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值