目录
输入一个整数N及N个整数,要求对给定的N个整数进行排序:先按长度排(短的在前),如长度一样则按大小排(小的在前)。
输入格式:
测试数据有多组。每组测试数据的第一行输入一个整数N(0<N<100),接下来的N行每行输入一个非负整数(最多可达80位)。当N等于0时,输入结束。
输出格式:
对于每组测试,输出排序后的结果,每个数据占一行。每两组测试数据之间留一个空行。
输入样例:
3
123
12
3333
5
1111
2012123123123123122133333
1000
333333333
12
0
输出样例:
12
123
3333
12
1000
1111
333333333
2012123123123123122133333
code演示:
#include <stdio.h>
#define N (int)1e6+10
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
while(n!=0)
{
getchar();//吃掉每一个输入n之后的换行
char a[81][101];
int len[81][2];
for(int i=0;i<n;i++)
{
gets(a[i]);
len[i][0]=strlen(a[i]);
len[i][1]=i;
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(len[j][0]>len[j+1][0])//比较长度大小,大了就交换
{
int t=len[j][0];
len[j][0]=len[j+1][0];
len[j+1][0]=t;
t=len[j][1];
len[j][1]=len[j+1][1];
len[j+1][1]=t;
}
if(len[j][0]==len[j+1][0])//相等比较字符大小,大了就交换
{
if(strcmp(a[len[j][1]],a[len[j+1][1]])==1) {
int t=len[j][0];
len[j][0]=len[j+1][0];
len[j+1][0]=t;
t=len[j][1];
len[j][1]=len[j+1][1];
len[j+1][1]=t;
}
}
}
}
for(int i=0;i<n;i++)
{
puts(a[len[i][1]]);//输出每一个字符串
}
scanf("%d",&n);
if(n!=0)printf("\n");//继续输入n,如果n=0就不输出换行
}
return 0;
}
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行