第五届河南省程序设计大赛——A 奇怪的排序

题目描述:

最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情。惟独对自然数的理解与人类不一样,它是从右往左读数.比如,它看到123时,会理解成321.让它比较23与15哪一个大,它说15大。原因是它的大脑会以为是32与51在进行比较.再比如让它比较29与30,它说29大.

给定Bill两个自然数A和B,让它将 [A,B] 区间中的所有数按从小到大排序出来。你会认为它如何排序?

输入描述:

<span style="color:#000000">第一行: N表示有多少组测试数据. (2<=N<=5 )
接下来有N行,每一行有两个正整数A B表示待排序元素的区间范围. (1<=A<=B<=200000    B-A<=50)
</span>

输出描述:

<span style="color:#000000">对于每一行测试数据,输出一行,为所有排好序的元素,元素之间有一个空格.</span>

样例输入:

复制

2
8 15
22 39

样例输出:

10 8 9 11 12 13 14 15
30 31 22 32 23 33 24 34 25 35 26 36 27 37 28 38 29 39

 

暴力题,建立一个结构体,存放颠倒后的和原来的两个数,按照颠倒后的大小进行排序

ac代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct bo{   //x代表原来的数,y代表颠倒后的数
	int x,y;
};
bool cmp(struct bo s1,struct bo s2){  //排序规则
	return s1.y<s2.y;
}
int diandao(int d){   //颠倒
	int sum1=0;
	while(d>0){
		sum1=sum1*10+d%10;
		d/=10;
	}
	return sum1;
}
int main()
{
	int n,l,r,h;
	cin>>n;
	while(n--){
		struct bo book[55];
		h=0;
		cin>>l>>r;
		for(int i=l;i<=r;i++){
			book[h].x=i;
			book[h].y=diandao(i);
			h++;
		}
		sort(book,book+h,cmp);
		for(int i=0;i<h;i++){
			cout<<book[i].x<<" "; 
		}
		cout<<endl;
	} 
	return 0;
}

 

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页