logn_sort 2023-03-17 20:33 采纳率: 50%
浏览 57
已结题

关于#回文构造机#的问题,如何解决?(语言-c++)

时间:1s 空间:256M

题目描述:

XTX非常喜欢回文串,他认为回文会给自己带来好运,有一天他看到一个字符串突发奇想,如果将这个字符串所有字符打乱,然后每次操作只能挑选若干个能构成回文串的字符组合成一个字符串,XTX最少需要操作几次才能取完所有字符。

输入格式:

输入一个字符串S,1≤|s|≤1000

输出格式:

第一行输出一个整数K,表示回文串的个数

接下来K行每行输出一个回文串,要求输出的所有字符串的字符集合恰好是输入的S中的所有字符集合

样例输入1:

abbaa

样例输出1:

1
ababa

样例输入2:

abc

样例输出2:

3
a
b
c

样例输入3:

aaabbbccc

样例输出3:

3
aba
bcb
cac

样例输入4:

z

样例输出4:

1
z

子任务一30分:|s|<=10

子任务二30分:|s|<=100

子任务三40分:|s|<=1000

  • 写回答

7条回答 默认 最新

  • ksgpjhqf 2023-03-18 15:32
    关注

    这个题目其实很简单,回文数左右两边的字符都是成对的,只有正中间的一个字符是单个的。所以偶数个的字符都可以在第一次输出,然后每行(包括第一行)输出一个单个的字符即可。
    下面是c语言代码,没有简化,时间复杂度大约是O(N)。

    #include<stdio.h>
    
    int main() {
        char s[501];//两边相同的字符只保留一个
        int c, i, j, k, times;
        int count[128] = {0}; //不确定有没有大写字母和数字
        //统计字符数目
        while (c = getchar(), c != '\n') {
            count[c]++;
        }
        //求出第一行
        for (i = j = 0; i < 128; i++) {
            while (count[i] > 1) {
                s[j++] = i;
                count[i] -= 2;
            }
        }
        for (i = 0; count[i] == 0 && i < 128; i++);
        if (i < 128) {
            s[j++] = i;
            count[i]--;
        }
        //计算并输出回文串个数
        for (times = 1, k = i + 1; k < 128; k++) {
            if (count[k] > 0)times++;
        }
        printf("%d\n", times);
        //输出第一行
        for (k = 0; k < j; k++) {
            putchar(s[k]);
        }
        for (k = j - 2; k >= 0; k--) {
            putchar(s[k]);
        }
        putchar('\n');
        //输出 后续行
        for (k = i + 1; k < 128; k++) {
            if (count[k] > 0) {
                putchar(k);
                count[i]--;
                putchar('\n');
            }
        }
        return 0;
    }
    
    

    img

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?