写一个程序,从输入文件读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出。该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30。如果两数倒过来的值相同则原数小的先输出,如3和30倒过来都为3,但先输出3再输出30。
单独一行包含二个用空格隔开的自然数a,ba,b,这二个自然数给出了待排序数的范围,其中1≤a≤b≤999999999,两个数之差不超过100。
排序的结果
我只对了样例(22 39),剩下全错,教练的题洛谷没有
#include<bits/stdc++.h>
using namespace std;
struct node{
int a,b;
}num[100];
int push(int a){
int b,result=0,i;
for(i=0;;i++){
if(a!=0){
b=a%10;
a=(a-b)/10;
result=result*10+b;
}
else{
return result;
}
}
}
bool cmp(const node& a,const node& b){
if(a.a<b.a) return true;
else return false;
}
signed main(){
int a,b;
scanf("%d%d",&a,&b);
for(int i=a,j=0;i<=b&&j<=b-a;i++,j++){
num[j].a=push(i);
num[j].b=i;
}
sort(num,num+(b-a),cmp);
for(int i=0;i<=(b-a);i++){
if(num[i].a==num[i+1].a){
if(num[i].b<num[i+1].b){
printf("%d\n",num[i].b);
printf("%d\n",num[i+1].b);
i++;
}
else{
printf("%d\n",num[i+1].b);
printf("%d\n",num[i].b);
i++;
}
}
else{
printf("%d\n",num[i].b);
}
}
return 0;
}