逆序数字排序

时间: 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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。