信息奥赛课课通(C++)p154-1近似排序

版权声明:如果是我原创的文章,请转载时,注明是来自我的转帖,加上我帖子的地址。谢谢! https://blog.csdn.net/mengdicfm/article/details/82732209

试题描述
读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30.

输入要求
1行两个正整数x和y,用一个空格隔开,1<=x<=y<=10000,y-x<=100

输出要求
包括y-x+1行,每行一个正整数,按两数到过来的值进行比较决定其大小,然后由小到大输出。

输入样例
22 39

输出样例
30
31
22
32
23
33
24
34
25
35
26
36
27
37
28
38
29

#include<iostream>
using namespace std;
int main()
{
    int a[10002],x,y,i,b[10002],t,j;
    //a[10002]存储原始数据
    //b[10002]存储倒过来的数据 
    cin>>x>>y;
    for(i=x;i<=y;i++)
    {
        a[i]=i;
    } 
    for(i=x;i<=y;i++)
    {
        b[i]=0;
        t=a[i];
        do
        {
        b[i]=b[i]*10+t%10;
        t/=10;
        }while(t);
    }
    //以上for循环,将原始数据每个数据倒过来后,存在新的数组b[10002]中 
    for(i=x;i<=y;i++)
    {
        for(j=i+1;j<=y;j++)
        {
            if(b[j]<b[i])
            {
            t=b[i];
            b[i]=b[j];
            b[j]=t;
            t=a[i];
            a[i]=a[j];
            a[j]=t;
            }
        }
    }
    //以上for循环对倒过来的数据b[100002]进行排序,用选择法按从小到大顺序
    //如果有交换数据的地方,对原始数组中相对位置的数据也同样进行交换,
    //保证交换后的原始数据就是要输出的数据 
    for(i=x;i<=y;i++)
    {
        cout<<a[i]<<endl;
    } 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/mengdicfm/article/details/82732209