逆序数字排序
时间: 1ms 内存:128M
描述:
现在给你一组数字,要求你把每一个数字逆序(如123变为321)之后进行排序,按从小到大的顺序排列;
输入:
第一行一个数字T(T<20),表示共有T组测试数据。
下面T行:每组开始有一个数字X(X<20),表示该组有X个数字,后面是该组的X(x<10000)个数字。
输出:
每组数据输出一行,输出按从小到大排列好的数字。
示例输入:
2
4 12 23 15 10
3 123 911 119
示例输出:
1 21 32 51
119 321 911
提示:
参考答案(内存最优[1092]):
#include<stdio.h>
int main()
{
int i,j,n,m,a[20]={0},k,q,h,zz,zy,f,b;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&m);
for(j=1;j<=m;j++)
{
scanf("%d",&k);
if(k<10)
{
a[j]=k;
}
else if(k>=10&&k<=99)
{
q=k/10;
h=k%10;
a[j]=h*10+q;
}
else if(k>=100&&k<=999)
{
q=k/100;
zz=k/10%10;
h=k%10;
a[j]=h*100+zz*10+q;
}
else
{
q=k/1000;
zz=k/100%10;
zy=k/10%10;
h=k%10;
a[j]=h*1000+zy*100+zz*10+q;
}
}
for(j=1;j<=m;j++)
{
for(f=1;f<=m-j;f++)
{
if(a[f]>a[f+1])
{
b=a[f];
a[f]=a[f+1];
a[f+1]=b;
}
}
}
for(j=1;j<=m;j++)
{
printf("%d ",a[j]);
}
printf("\n");
}
return 0;
}
参考答案(时间最优[0]):
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include <math.h>
using namespace std;
int main()
{
int num[30];
int t;
int x,temp,qtemp;
scanf("%d",&t);
while(t--)
{
scanf("%d",&x);
for(int i=0;i<x;i++)
{
scanf("%d",&temp);
if((temp/1000)!=0)
{
num[i]=(temp%10)*1000+(temp/10)%10*100+(temp/100)%10*10+temp/1000;
}
else if((temp/100)!=0)
{
num[i]=(temp%10)*100+(temp/10)%10*10+temp/100;
}
else if((temp/10)!=0)
{
num[i]=(temp%10)*10+temp/10;
}
else
{
num[i]=temp;
}
}
sort(num,num+x);
for(int i=0;i<x;i++)
{
printf(i==x-1?"%d\n":"%d ",num[i]);
}
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。