很简单的思路就是按最高位最大的排,最高位一样比次高位。当然相等另外讨论。
这样还剩下一种特殊情况就是ABC。。。和AB这样的前n位一样后面多几位的情况。
比如ABC和AB比,这样就要比较C和A谁大
比如34和341比,就要排 34 341.
但是34和344比,就拍要344 34
如果多很多位呢ABCD和AB比
34和3419比,343419>341934
34和3441比,344134>343441
很明显就只要看多出的一位就可以了。
好,接下来我需要选取最高位的方法。
在python里一个选位好办法是把int转成str。然后按照索引[0]是最高位[1]是次高位。并且可以用负数选最低位,[-1]是最低位,[-2]是次低位。
最后就是排序了,这样n个数在这里,我们先找到按这样的比较法最大的排最前,然后再选第二大的。我想做两个列表,一个存初始的数,一个按顺序存结果。
n=int(input())
second_line=input()
num=[int(i) for i in second_line.split()]
python的话,可以这样写输入,再用len(num)做循环的次数判定的话,甚至可以不用这个n
然后把比较函数写一下
def compare(intA,intB):
if(intA==intB):
return intA
strA=str(intA)
strB=str(intB)
if(len(strA)>len(strB)):
size=len(strB)
long='A'
else:
size=len(strA)
long='B'
k=0
while(k<size):
if(int(strA[k])>int(strB[k])):
return intA
if(int(strA[k])<int(strB[k])):
return intB
k=k+1
# ABC vs AB情况
if(k==size):
if(long=='A'):
if(int(strA(k))>int(strB(0))):
return intA
else:
return intB
if(long=='B'):
if(int(strA(0))>int(strB(k))):
return intA
else:
return intB
接着就是比较排序了
i=0
while(i<n):
max_j=0
max=num[0]
j=0
while(j<len(num)):
if(num[j]==compare(num[j],max)):
max=num[j]
max_j=j
j=j+1
ans.append(max)
num.pop(max_j)
i=i+1
最后组合一下就可以了
i=0
strans=''
while(i<len(ans)):
strans=strans+str(ans[i])
i=i+1
print(strans)
通过,最后完整代码
def compare(intA,intB):
if(intA==intB):
return intA
strA=str(intA)
strB=str(intB)
if(len(strA)>len(strB)):
size=len(strB)
long='A'
else:
size=len(strA)
long='B'
k=0
while(k<size):
if(int(strA[k])>int(strB[k])):
return intA
if(int(strA[k])<int(strB[k])):
return intB
k=k+1
# ABC vs AB情况
if(k==size):
if(long=='A'):
if(int(strA(k))>int(strB(0))):
return intA
else:
return intB
if(long=='B'):
if(int(strA(0))>int(strB(k))):
return intA
else:
return intB
n=int(input())
second_line=input()
num=[int(i) for i in second_line.split()]
ans=[]
i=0
while(i<n):
max_j=0
max=num[0]
j=0
while(j<len(num)):
if(num[j]==compare(num[j],max)):
max=num[j]
max_j=j
j=j+1
ans.append(max)
num.pop(max_j)
i=i+1
i=0
strans=''
while(i<len(ans)):
strans=strans+str(ans[i])
i=i+1
print(strans)