首页 > 解决方案 > Codechef 练习题 - Chef 和去货币化

问题描述

问题是: 在一个叫做Chef Land的国家,发生了很多货币欺诈,所以该国元首Chefu决定选择新的当地货币面额——所有整数N以内的偶数硬币都应该存在. 几天后,一个市民抱怨没有办法创造一个奇数值,于是 Chefu 决定他也应该引入价值为 1 的硬币。形式上,给你一个整数 N;对于 v=1 且每个偶数正整数 v≤N,存在价值为 v 的硬币。

你还得到一个整数 S。为了快速处理交易,找出支付价格 S 所需的最小硬币数量。

输入 输入的第一行包含一个整数 T,表示测试用例的数量。T 测试用例的描述如下。每个测试用例的第一行也是唯一一行包含两个空格分隔的整数 S 和 N。输出 对于每个测试用例,打印一行包含一个整数 - 硬币的最小数量。

约束 条件 1≤T≤10,000 1≤S≤109 2≤N≤109 N 为偶数

子任务子任务 #1(100 分):原始约束

示例输入 4 2 2 1 14 30 10 31 4 示例输出 1 1 3 9

我的解决方案是

n=int(input())
res=[]
for i in range(1,n+1):
    S,N = [int(x) for x in input().split()]
    rem=S%N
    if rem == 0:
        res.append(int(S/N))
    else:
        if rem==1:
            res.append(int(S/N+1))
        else:
            if rem/2 == 0:
                res.append(int(S/N+1))
            else:
                res.append(int(S/N+2))
for j in res:
    print(j)

它显示我的答案是错误的。谁能帮我 ?

标签: pythonpython-3.x

解决方案


实际上,我并没有考虑将 1 作为余数的情况,即在 31、41、51 等数字的情况下,这给我带来了麻烦。好吧,在考虑了上述条件和一些小操作之后,它终于奏效了。希望你能理解。感谢您的回复。

n=int(input())
res=[]
for i in range(n):
    S,N = [int(x) for x in input().split()]
    rem=S%N
    if S==1:
        res.append(int(1))
    elif(rem == 0):
        res.append(int(S/N))
    else:
        if(rem%2==0 or rem==1):
            res.append(int(S/N+1))
        else:
            res.append(int(S/N+2))
for j in res:
    print(j)

推荐阅读