【问题标题】:I am facing issue to get the logic for following problem我面临获取以下问题的逻辑的问题
【发布时间】:2020-02-29 15:55:57
【问题描述】:

如何编写以下问题的逻辑。这个问题有点棘手。

两个王国正在交战。王国 1 有 N 个士兵(编号为 1 到 N),战争持续了 K 天。每个王国每天只有一名士兵战斗。

王国 1 可以从士兵编号 Ni 到 Nj 中选择一名士兵。每天都会为您提供 Ni 和 Nj。

选择标准:每个士兵有 2 个参数 - A 和 B。如果 A 最大,则选择一个士兵。如果不止一名士兵拥有 A 最大值,则该士兵拥有最小值。 B(入围士兵)被选中。如果仍有不止一名士兵可用,则选择索引最小的士兵(入围士兵中)。 打印为战争的每一天选择的士兵编号。

输入: 第 1 行包含 Kingdom1 的士兵人数 => N 第 2 行包含 N 个空格分隔的 A 值 第 3 行包含 N 个空格分隔的 B 值 第 4 行包含战斗进行的天数 => K 接下来的 K 行包含 Ni 和 Nj 的空格分隔值

输出: K 行包含为战争的每一天选择的士兵编号。

示例输入: 10 2 5 3 7 9 2 9 8 7 15 5 2 1 8 3 1 2 9 0 5 3 1 5 3 8 4 10

结果: 5 7 10

感谢任何帮助。提前致谢。

【问题讨论】:

  • 到目前为止你做了什么?可以分享一下吗?
  • 感谢您的快速回复,但我无法理解究竟需要什么。 :(

标签: python-3.x logical-operators


【解决方案1】:

这可能不是最干净的答案,但它会起作用(在这段代码中,我假设 ni 和 nj 也在候选名单中)

num = input()
a = input()
b = input()
k = input()
start = []
end = []
for i in range(int(k)):
    (ni, nj) = input().split(' ')
    start.append(int(ni))
    end.append(int(nj))
for j in range(len(start)):
    amax = a[start[j]-1]
    bmin = a[start[j]-1]
    chosen = start[j]
    for i in range(end[j]-start[j]+1):
        if amax < int(a[start[j]+i-1]):
            amax = int(a[start[j]+i-1])
            bmin = int(b[start[j]+i-1])
            chosen = start[j]+i
        elif amax == int(a[start[j]+i-1]):
            if bmin > int(b[start[j]+i-1]):
                amax = int(a[start[j] + i - 1])
                bmin = int(b[start[j] + i - 1])
                chosen = start[j]+i
    print('the chosen one is number %i' % chosen)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    相关资源
    最近更新 更多