【问题标题】:How can I change what a user already inputted and change a specific part of the input based on the parameters?如何更改用户已经输入的内容并根据参数更改输入的特定部分?
【发布时间】:2022-10-16 23:39:56
【问题描述】:
x=input()
x=list(x)
n=''.join(x[0:x.index(' ')])
m=''.join(x[x.index(' ')+1:])
for y in range (0,int(n)):
    seats=input()
events=int(input())
for a in range (0,events):
    changes=input()
    if changes[0]=='i' and changes[1]=='n':
        if int(changes[3:])>int(m):
            print("-1")

这就是我的努力。

目标是接收两个输入(n,m)n 是座位行,m 是列数。然后我必须接受 n 多个输入,每个输入是该行中的一个座位是否被占用,例如,如果输入 2 3 为 n m 然后,用户接下来将再输入 2 次,每个输入有 3 个整数 0 或1(1 为座位被占用,0 为空座位)。所以 101 111 意味着第一排中间的座位是空的,但其余的座位都被占用了。然后在用户输入座位的占用率后,我将再输入一个 int 输入来确定座位上发生的事件数量,然后我将再输入 x 个输入,其中 x 是事件的数量。 有两种类型的事件:“in”和“out”。如果用户输入“in z”,则表示已经有 z 个学生进入房间,他们正在寻找同排的 z 个座位来坐,如果他们找不到该数量的连续座位,那么他们离开房间。这意味着假设班级最初是 1110 0101,然后用户输入“in 2”然后进入房间的 2 个学生将离开,因为同一排没有任何连续的 2 个空座位。发生这种情况时,我们应该打印'-1',表明他们已经离开,因为他们没有找到座位。但是,假设是 1001 1111 并且用户输入了 'in 2',那么学生将占据前排的两个座位,它会变成 1111 1111,因此我们必须通过打印'1 2 来表明他们已经占据了这些座位'表示学生从第1排座位2开始连续坐了2个座位。另外,正在选择座位的学生正在尝试尽可能减少行和列,例如1010 1010和用户输入'in 1' 然后座位变为 1110 1010,因为学生选择了可能的最低行,并且在该行中,选择了可能的最低连续列。

对于另一种类型的事件:“out”,用户将输入“out x y”,其中 x 是行,y 是座位。 out 表示学生已经离开座位(注意:当输入“out”时,可以保证学生就座)。因此,如果座位是 1110 0111 并且用户输入“out 2 3”,那么座位将变为 1110 0101。

考虑这个样本输出和输入: 样本输入 1:// 3 4 // 0110// 0001 // 1010 // 6 // 在 3// 出 2 2// 在 2// 在 1// 出 2 3// 在 2// 样本输出 1:// 2 1// -1// 1 1// 2 2 // 1110 // 1111 // 1010 // 注意输出的每一行(//表示下一行)对应于'in'动作,例如'in 3'动作对应于2 1个席位,'in 2'动作是'-1',因为当时没有两个连续的座位是免费的。然后在事件完成后打印座位的最终状态。

我对如何在没有任何导入语句(它的准则之一)的情况下完成这项任务感到非常困惑。非常感谢任何帮助。

【问题讨论】:

    标签: python


    【解决方案1】:

    seats 是您教室的状态,因此您将使用它并对其进行更新以确定您需要了解的内容。 seats 的一个例子是 0000 0000 0000。注意保持行分开的空格。

    给定in z,要找到连续的空座位,我们可以使用seats.find('0' * z),它会告诉我们location-1(如果没有)。 location 始终是最小值,因此它将是最小值 row, column。如果location 有效,那么我们可以通过切片更新seatsseats = seats[:location] + '1' * z + seats[location + z:]

    对于out x y,您需要将两个输入转换为seats 字符串location = (x - 1) * (m + 1) + (y - 1) 中的索引。我们可以再次切片seats = seats[:location] + '0' + seats[location + 1:]

    【讨论】:

    • 谢谢你。我明白你的意思,但我不确定如何以及在哪里将每个部分实现到我的代码中以确保它正常运行,你能告诉我一个将这个函数添加到我的代码中的小例子吗?
    • 您需要首先构建您的 seats 变量。您当前的代码对行采用多个值,但它不会将输入累积到组合的 seats 状态中。此处解释的inout 的进程应合并到当前代码中的events 循环中。
    • iv;e 已经将它们放入事件循环中,我该如何构建座位变量?另外,我如何输出原始帖子中示例输出中概述的更改?
    • seats = [] 后跟 for y in range (0,int(n)): seats.append(input()) 后跟 seats = ' '.join(seats) 可以做到。
    • 不确定如何在我的情况下使用它。座位已经由用户定义,我们必须根据“in x”和“out y z”对其进行更改。那么我们如何通过将席位定义为空列表来做到这一点呢?我如何打印由于“in x”而发生的变化? 2 1 -1 1 1 2 2 1110 1111 1010 请注意,此处显示的每个元素都位于单独的输出行上(2 1 是一行,-1 是下一行,以此类推)2 1 是从 'in 3' 在样本输入。学生坐了 2 1 2 2 2 3 所以我必须打印最左边的座位
    猜你喜欢
    • 2015-06-22
    • 2017-03-27
    • 2014-05-27
    • 2020-02-10
    • 2020-06-13
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多