平平无奇的编程萌新 2022-03-16 10:43 采纳率: 95.2%
浏览 157
已结题

程序设计 -- 01串排序

将 01 串首先按长度排序,长度相同时,按 1 的个数多少进行排序,1 的个数相同时再按 ASCII 码值排序(字典序)。
输入格式
第一行输入一个整数 n (1≤n≤100),表示字符串的个数。
输入数据中含有一些 01 串,01 串的长度不大于 256 个字符。
输出格式
重新排列 01 串的顺序,使得串按基本描述的方式排序,然后依次输出。
输入样例
6
10011111
00001101
1010101
1
0
1100
输出样例
0
1
1100
1010101
00001101
10011111

  • 写回答

1条回答 默认 最新

  • 浪客 2022-03-16 11:57
    关注

    供参考

    
    #include <iostream>
    using namespace std;
    
    typedef struct node
    {
        char ch[257];
        int one, len;
    } Node;
    
    void swap(Node &a, Node &b)
    {
        Node tmp = a;
        a = b;
        b = tmp;
    }
    
    int main()
    {
        int n;
        cin >> n;
        Node *node = new Node[n];
        for (int i = 0; i < n; i++)
        {
            node[i].one = 0;
            node[i].len = 0;
    
            char ch;
            while ((ch = getchar()) != '\n' && node[i].len < 256)
            {
                node[i].ch[node[i].len] = ch;
                if (ch == '1')
                    node[i].one++;
                node[i].len++;
            }
            node[i].ch[node[i].len] = '\0';
        }
    
        for (int i = 0; i < n - 1; i++)
        {
            for (int j = i; j < n; j++)
            {
                if (node[i].len > node[j].len)
                {
                    swap(node[i], node[j]);
                }
                else if (node[i].len == node[j].len)
                {
                    if (node[i].one > node[j].one)
                    {
                        swap(node[i], node[j]);
                    }
                    else if (node[i].one == node[j].one)
                    {
                        int k = 0;
                        while (k < node[i].len)
                        {
                            if (node[i].ch[k] > node[j].ch[k])
                            {
                                swap(node[i], node[j]);
                                break;
                            }
                            k++;
                        }
                    }
                }
            }
        }
        for (int i = 0; i < n; i++)
        {
            cout << node[i].ch << endl;
        }
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题
  • ¥100 无网格伽辽金方法研究裂纹扩展的程序
  • ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
  • ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
  • ¥50 求一位精通京东相关开发的专家
  • ¥100 求懂行的大ge给小di解答下!
  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活