YTU 01 串排序

题目描述

将 010101 串首先按长度排序,长度相同时,按 111 的个数多少进行排序,111 的个数相同时再按 ASCII 码值排序。

输入

输入数据中含有一些 010101 串,010101 串的长度不大于 256256256 个字符。

输出

重新排列 010101 串的顺序。使得串按基本描述的方式排序。

输入输出样例

样例输入 #1

复制

10011111
00001101
1010101
1
0
1100

样例输出 #1

复制

0
1
1100
1010101
00001101
10011111

#include<stdio.h>
#include<string.h>
#define swap(a,b) {strcpy(c,a);strcpy(a,b);strcpy(b,c);}
int main()
{
    char a[256][256],c[256];
    int i,j,k,m1,m2,n;
    i=0;
    while(scanf("%s",a[i])!=EOF) //输入
    {
        i++;     //计数
    }
    for (j=0;j<i;j++)
    for (k=j;k<i;k++)
    {               //size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。返回字符串的长度。
        if(strlen(a[j])>strlen(a[k])) //大字符组后移
        {
            swap(a[j],a[k]);
        }
        else if(strlen(a[j])==strlen(a[k]))//字符组大小相等
        {
            m1=0;//计算字符组a[j]中'1'数量
            m2=0;//计算字符组a[k]中'1'数量
            for (n=0;n<strlen(a[j]);n++)
            {
                if(a[j][n]=='1')
                    m1++;
                if(a[k][n]=='1')
                    m2++;
            }
            if(m1>m2)//'1'数量多的字符组后移
            {
                swap(a[j],a[k]);
            }
            else if(m1==m2)
            {
                if(strcmp(a[j],a[k])>0)
                {/*C 库函数 int strcmp(const char *str1, const char *str2) 
                    把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
                    该函数返回值如下:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。*/
                    swap(a[j],a[k]);
                }
            }
        }
    }
    for (j=0;j<i;j++)
    printf("%s\n",a[j]);
    return 0;
}
 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值