在第17行…l [j] = p中出现错误“ IndexError:列表分配索引超出范围”

问题描述 投票:-4回答:1
t=int(input())
while t:
    t=t-1
    n,k=map(int,input().split())
    a=n
    b=n-1
    l=[]
    c=1
    for i in range (1,n+1):
        l.append(i)
    while (k>n):
        if(c%2==1):
            n=n+b
            p=n
            c=c+1        
            for j in range (1,a+1):
                l[j]=p
                p=p-1

        if(c%2==0):
            n=n+b
            p=n
            c=c+1
            for z in range (1,a+1):
                l[j]=p-b
                p=p+1
    print(l.index(k))

在第17行... l [j] = p中出现错误“ IndexError:列表分配索引超出范围”

问题是Alex在一家知名的跨国公司中担任初级程序员。亚历克斯在编程方面并不擅长,他的程序通常存在很多错误。因此,他的老板总是对亚历克斯很生气。作为嫉妒的同事,您决定建议老板这次以怪异的方式惩罚亚历克斯。

[Alex受惩罚,以至于他必须在包含编号为1到N的N个楼梯的楼梯上攀登K楼梯。如果K大于N,在Alex到达第N楼梯后,他将转过180度,然后继续向下走直到到达Kth楼梯;到达终点后,如果仍然没有到达Kth楼梯,他将再次转过180度,以类似的方式继续惩罚,直到他完成所有K楼梯的爬升。亚历克斯必须在完成所有K步后报告他所在的楼梯编号。

您已决定编写一个程序,以在K步之后检查Alex的真实性来找到Alex的位置。

例如:-如果N = 6&K = 15,那么Alex将在步骤n中结束。 5。

                    __| 
                __| 6
            __| 5,7,15  
        __| 4,8,14  
    __| 3,9,13  
__| 2,10,12
1,11

输入:第一行将包含T,即测试用例的数量。然后是测试用例。每个测试用例包含一行输入,两个整数N,K。输出:对于每个测试用例,请在K步之后输出步号。

Constraints
1≤T≤100
1≤N,K≤109
Sample Input:
    3
    6 15
    5 12
    4 9
Sample Output:
    5
    4
    3          
python python-3.x compiler-errors coding-style
1个回答
0
投票

对不起,我无法调试您的代码。

此外,当您在n上迭代时,代码可能会给您一个超时错误,该错误可能与10^9一样大。这将永远无法及时完成。

使用您制作的图表,我得出了一个适用于案例的公式。我不知道该算法为何有效。它主要是通过观察图表来实现的。

for _ in range(int(input())):
    n, k = map(int, input().split())
    try:
        m = k % ((n - 1) * 2)
    except ZeroDivisionError: # In case n=1
        print(1)
        continue

    if 1 <= m <= n:
        print(m)
    elif m == 0:
        print(2)
    else:
        print(n - (m - n))
© www.soinside.com 2019 - 2024. All rights reserved.