Python小白,本地和在线ide运行没问题,提交报re,救命aaa

P1015 [NOIP1999 普及组] 回文数

HArcturus @ 2022-04-10 11:32:41

a=int(input()) #a是多少进制
b=input() #b是a进制数

def numm():
    times=0
    global a
    global b
    b_list = list(b)
    for i in range(0,len(b_list)):
        if b_list[i]=="A":
            b_list[i]="10"
        elif b_list[i]=="B":
            b_list[i]="11"
        elif b_list[i]=="C":
            b_list[i]="12"
        elif b_list[i]=="D":
            b_list[i]="13"
        elif b_list[i]=="E":
            b_list[i]="14"
        elif b_list[i]=="F":
            b_list[i]="15"
        else:
            continue
    c_list = b_list[:]
    b_list.reverse()#左边是个位,右边是高位
    for _ in range(0,30):
        test_list=b_list[:]
        test_list.reverse()
        if b_list==test_list:
            return("STEP="+str(times))
        times+=1
        for i in range(0,len(b_list)):
            b_list[i]=str(int(c_list[i])+int(b_list[i]))
            if int(b_list[i])>(a-1):
                b_list[i]=str(int(b_list[i])-a)
                if i != (len(b_list)-1):
                    b_list[i+1]=str(int(b_list[i+1])+1)
                else:
                    b_list.append("1")
        c_list=b_list[:]
        c_list.reverse()
    return "Impossible!"
print(numm())

by HArcturus @ 2022-04-10 11:34:14

for i in range(0,len(b_list)):
        if b_list[i]=="A":
            b_list[i]="10"
        elif b_list[i]=="B":
            b_list[i]="11"
        elif b_list[i]=="C":
            b_list[i]="12"
        elif b_list[i]=="D":
            b_list[i]="13"
        elif b_list[i]=="E":
            b_list[i]="14"
        elif b_list[i]=="F":
            b_list[i]="15"

这一段是把16进制数全部转换成10进制 比如["A","B"] 转换成["10","11"]


by HArcturus @ 2022-04-10 11:38:27

思路是b_list是待处理

test_list是b_list的倒序(不知道是不是这么说),用来检验是否是回文

c_list是b_list的倒序,是用来做加法的

每次就b_list+c_list的每一项

如果b_list的一项超过了a-1(进制),那就是要进位了,

如果不是最后一项,就给下一项加一

如果是最后一项,就给b_list加上一项["1"]


by Ramune @ 2022-04-10 12:09:42

input().strip()


by Ramune @ 2022-04-10 12:10:26

a=int(input().strip()) #a是多少进制
b=input().strip() #b是a进制数

def numm():
    times=0
    global a
    global b
    b_list = list(b)
    for i in range(0,len(b_list)):
        if b_list[i]=="A":
            b_list[i]="10"
        elif b_list[i]=="B":
            b_list[i]="11"
        elif b_list[i]=="C":
            b_list[i]="12"
        elif b_list[i]=="D":
            b_list[i]="13"
        elif b_list[i]=="E":
            b_list[i]="14"
        elif b_list[i]=="F":
            b_list[i]="15"
        else:
            continue
    c_list = b_list[:]
    b_list.reverse()#左边是个位,右边是高位
    for _ in range(0,30):
        test_list=b_list[:]
        test_list.reverse()
        if b_list==test_list:
            return("STEP="+str(times))
        times+=1
        for i in range(0,len(b_list)):
            b_list[i]=str(int(c_list[i])+int(b_list[i]))
            if int(b_list[i])>(a-1):
                b_list[i]=str(int(b_list[i])-a)
                if i != (len(b_list)-1):
                    b_list[i+1]=str(int(b_list[i+1])+1)
                else:
                    b_list.append("1")
        c_list=b_list[:]
        c_list.reverse()
    return "Impossible!"
print(numm())

by Ramune @ 2022-04-10 12:10:43

然后就ac了


by Ramune @ 2022-04-10 12:11:44

好像是因为linux评测环境的换行符号与windows不同


by Ramune @ 2022-04-10 12:13:22

@HowieHzGo


by HArcturus @ 2022-04-10 13:14:37

@hanyujie 谢谢大佬


|