A回文数题解

回文数

https://ac.nowcoder.com/acm/contest/7745/A

这题实在太细节,前后WA了十几次
当有两个奇数或0的个数大于等于非0个数 输出-1
重要的是特判最后一个样例
后面就先处理回文串的前一半,再处理回文串的后一半
在代码中已经写了详细的注释
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int su=0,a[10],nu=0,s;
    for(int i=0; i<10; ++i)
    {
        scanf("%d",&a[i]),su+=a[i];
        if(a[i]%2)
            nu++,s=i;
    }
    char ans[1000]={'\0'};
    int cn=0;
    if(a[0]==1&&su-a[0]==0)//特判最后一个样例
    {
        printf("0\n");
        return 0;
    }
    if(nu>=2||a[0]>=su-a[0])//有两个奇数或0的个数大于等于非0个数
    {
        puts("-1");
        return 0;
    }
    if(nu)a[s]--;
    if(a[0]!=0)
    {
        for(int i=1; i<10; ++i)
            if(a[i]&&a[i]!=1)
            {
                a[i]--;
                ans[++cn]=(char)(i+'0');
                for(int i=0; i<10; ++i)//处理前一半
                {
                    if(a[i])
                    {
                        a[i]/=2;
                        while(a[i]--)
                            ans[++cn]=(char)(i+'0');
                    }
                }
                if(nu==1)   //有奇数时,在末尾添加奇数
                ans[++cn]=s+'0';
                break;
            }
    }
    else
    {
        for(int i=0; i<10; ++i)
        {
            if(a[i])
            {
                a[i]/=2;
                while(a[i]--)
                    ans[++cn]=i+'0';
            }
        }
        if(nu==1)
        ans[++cn]=s+'0';
    }
    for(int i=1; i<=cn; ++i)//利用对称复制
        ans[su-i+1]=ans[i];
    for(int i=1; i<=su; ++i)
        printf("%c",ans[i]);
    puts("");
    return 0;
}


全部评论
0>=非0为什么不行,如果我2个02个1,完全可以1001构造出来a
2 回复 分享
发布于 2022-01-30 00:24

相关推荐

大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务