将 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
程序设计 -- 01串排序
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥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后台保活