NC212226. 回文数
描述
输入描述
一行 10 个自然数,分别表示数码 的出现次数。
输出描述
如果无解,只输出 “-1”。(不含引号)否则,输出一个数表示最小的解。
示例1
输入:
0 2 4 2 0 2 0 0 0 0
输出:
1223553221
示例2
输入:
1 1 4 5 1 4 0 0 0 0
输出:
-1
示例3
输入:
4 0 2 3 0 0 0 2 0 0
输出:
20037373002
示例4
输入:
2 0 0 0 0 0 0 0 0 1
输出:
-1
说明:
注意不能有前导 0。示例5
输入:
1 0 0 0 0 0 0 0 0 0
输出:
0
C++(clang++11) 解法, 执行用时: 9ms, 内存消耗: 504K, 提交时间: 2020-12-31 13:00:00
#include<bits/stdc++.h> using namespace std; int main(){ int i,j=0,k=0,s=0,t,a[15]; char ans[105]; for(i=0;i<=9;i++){ scanf("%d",&a[i]),s+=a[i]; if(a[i]>=2&&!j&&i)j=i; if(a[i]&1)k++,t=i; } if(k>1||(a[0]>1)&&!j){printf("-1\n");return 0;} ans[0]=ans[s-1]=j+'0',a[j]-=2; for(j=1,i=0;i<=9;i++) while(a[i]>=2)ans[j]=ans[s-j-1]=i+'0',j++,a[i]-=2; if(k)ans[s/2]=t+'0'; ans[s]='\0',printf("%s\n",ans); return 0; }
Python3 解法, 执行用时: 38ms, 内存消耗: 4656K, 提交时间: 2022-01-24 16:01:22
l=list(map(int,input().split())) num='' #print(l) for x in range(10): if l[x]&1: if num=='': num=str(x) else: num='-5' break he=sum(l[1:]) if num=='-5': print(-1) elif he<2 and l[0]>=2: print(-1) else: s="" for x in range(1,10): s+=str(x)*(l[x]//2) if len(s)>0: s=s[0]+'0'*(l[0]//2)+s[1:] s+=num+s[::-1] print(s) #print(num)