[山东科技大学OJ]1247 Problem E: 规范序排列

 

Time Limit: 1 Sec  Memory Limit: 16 MB
Submit: 4388  Solved: 2531
[Submit][Status]

Description

规范序是一种对字符串比较的排序规则,定义如下:

1 串长小的排在前面;

2 相同串长的按照字典序排列顺序。

串的字典序遵循如下递归定义:

1 两串的前n-1个字符相同,第n个字符字典序小的排在前面;

2 只有两串的字符完全相同时,才有两串相等。

字符的字典序即按照字母排列的顺序,即a, b, ..., z。ASCII码范围内的字符串的字典序比较可以用strcmp()函数(原型和功能见HINT)完成。

 

Input

第一行输入为一个整数N(N<=100),后接N行,每行一个字符串。每个字符串仅由小写字母“a”~“z”组成,长度不超过10个字符。

 

Output

输出为N行,按照字符串的规范序排列,规范序小的排前面。

 

Sample Input

10 abc bc aca ca c aac aba bc da ba

Sample Output

c ba bc bc ca da aac aba abc aca

HINT

 

原型: int strcmp(const char *s1,const char * s2);

 

功能:比较字符串s1和s2。

 

  当s1<s2时,返回值<0

 

  当s1==s2时,返回值=0

 

  当s1>s2时,返回值>0

 

 

 

Append Code

[Submit][Status]


#include <stdio.h>

#include <string.h>

char swap(char str1[],char str2[])

{

    int i,t;

    for(i=0;str1[i]!='\0';i++)

    {

        t=str1[i];

        str1[i]=str2[i];

        str2[i]=t;

    }

}

int main()

{

    int N,i,j,k,n,m;

    char c[120][120];

    scanf("%d",&N);

    for(i=1;i<=N;i++)

    {

        scanf("%s",c[i]);

    }

    for(j=1;j<=N;j++)

        for(i=1;i<=N-j;i++)

        {

            n=strlen(c[i]);

            m=strlen(c[i+1]);

            if(n>m)

                swap(c[i],c[i+1]);

            else if(n==m)

            {

                if(strcmp(c[i],c[i+1])>0)

                    swap(c[i],c[i+1]);

            }

        }

    for(i=1;i<=N;i++)

        printf("%s\n",c[i]);

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值