当日总结

链接:https://ac.nowcoder.com/acm/contest/19851/1005
来源:牛客网

Froggy 分别给出 10 个数码的出现次数,你需要找到一个由这些数码组成的最小的数,满足:

  1. 这个数是回文的。
  2. 不能有前导 0。
    注:假设这个数字长度是
    𝐿
    L,那么这个数是回文的当且仅当对于任意的
    𝑖

    [
    1
    ,
    𝐿
    ]
    i∈[1,L],第
    𝑖
    i 位的数码和第
    𝐿

    𝑖

1
L−i+1 位的数码相同。
快来帮帮 Froggy 吧!
输入描述:
一行 10 个自然数,分别表示数码
0

9
0∼9 的出现次数。
输出描述:
如果无解,只输出 “-1”。(不含引号)
否则,输出一个数表示最小的解。

include<stdio.h>

int main()
{
int str[10]={0};
int i=0,flag_ji=0;
int sum=0;
for(i=0;i<10;i++)
{
scanf("%d",&str[i]);
sum+=str[i];
if(str[i]%2!=0&&str[i]!=0)
{
flag_ji++;
}
}
if(flag_ji>1)
{
printf("-1");
return 0;
}
if(sumstr[0])
{
if(str[0]
1)
printf("0");
else
printf("-1");
return 0;
}
if(sum-str[0]<2)
{
printf("-1");
return 0;
}
int left=0,right=sum-1,j=0,k=0,flag=0;
int result=(int)malloc(sizeof(int)*sum);
for(i=1;i<10;i++)
{
if(str[i]0)
{
continue;
}
for(j=0;j<str[i]/2;j++)
{
result[left++]=i;
result[right--]=i;
if(str[0]>0&&flag
0)
{
for(k=0;k<str[0]/2;k++)
{
result[left++]=0;
result[right--]=0;
}
flag=1;
}
}
}
int index=0;
for(i=0;i<10;i++)
{
if(str[i]%2!=0)
{
index=i;
break;
}
}
if(flag_ji==1)
{
result[right]=index;
}
for(i=0;i<sum;i++)
{
printf("%d",result[i]);
}
return 0;
}

posted @ 2025-11-20 18:53  lagranSun  阅读(3)  评论(0)    收藏  举报