怪异的排列

Description

将输入的N个整数,按照这些数的逆序数从小到大排序输出。 
数字的逆序:例如数字是123,则逆序数为321 
例如输入的数据为 122,432,321 
则输出 321 122 432 
注意:输出还是那些数,只是排序依据是其逆序数。 

Input

第一行为N (N<100) 
其后的N行,每行一个正整数(均小于等于10000) 

Output

按逆序数从小到大次序输出,一行一个数

Sample Input

3
122
432
321

Sample Output

321
122

432

这题刚开始拿到手,哇,觉得好容易呀,做了之后发现总是不能accept,就很难受。冥思苦想后,猛然发现仅仅交换原来的数字是不够的,还要交换它的逆序数才可以。

代码如下:

#include<stdio.h>

int main()
{
	int a[100],c[100]={0};
	int i,n,j=0,k,t;
	scanf("%d",&n);	
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);

	for(i=0;i<n;i++)
	{
		t=a[i];
		while(t!=0)
		{
			c[i]=c[i]*10+t%10;
			t=t/10;
		}
	}
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
		{
			if(c[i]>c[j])
			{
				t=a[i];
				a[i]=a[j];
				a[j]=t;
				t=c[i];
				c[i]=c[j];
				c[j]=t;
			}
		}
	for(i=0;i<n;i++)
		printf("%d\n",a[i]);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zmc1248234377/article/details/79513192
今日推荐