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

关于#回文构造机#的问题,如何解决?(语言-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 Android STD快速启动
  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动