字符串反转排序

近似排序

题目描述:读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30。
输入:1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中l≤第一个数≤第二个数≤999999999,两个数之差不超过100。
输出:输出排序后的数据,每行输出一个数。
样例输入:
22 39
样例输出:
30
31
22
32
23
33
24
34
25
35
26
36
27
37
28
38
29
39
这题吧,我怀疑它是来考函数的,不难,就是函数多,通过这题确实学了好些函数(大年三十晚上在这码代码,哎,辛酸的不说了),现在步入正题。

    #include<bits/stdc++.h>
    #include<cstring>
    #include <cstdlib>
    #define N 105
    using namespace std;
    typedef struct
    {
        int u,v;
    }STU;//建立一个结构体,一个是原数字,另一个是反转以后的数字
    int main()
    {
        STU a[N],h;
        int minn,maxn,i,j=0,k,w,m,len,l;
        char b[10],c[10],p[N][N],q[N][N];
        scanf("%s%s",b,c);
        w=atoi(b);//atoi函数,将字符串转为数字
        m=atoi(c);
        minn=min(w,m);
        maxn=max(w,m);
        for(i=minn;i<=maxn;i++)
        {
            j++;
            a[j].u=i;
            a[j].v=i;
        }
        for(i=1;i<=j;i++)
        {
            sprintf(p[i],"%d",a[i].u);//sprintf函数,将数字转换为字符串
            len=strlen(p[i]);
            for(k=0,l=len-1;l>=0;k++,l--)
            {
                q[i][k]=p[i][l];
            }
            q[i][len]='\0';//字符串末尾为\0
            a[i].u=atoi(q[i]);
        }
        for(i=1;i<j;i++)
        {
            for(k=1;k<j;k++)
            {
                if(a[k].u>a[k+1].u)
                {
                    h=a[k];
                    a[k]=a[k+1];//结构体调换位置
                    a[k+1]=h;
                }
            }
        }
        for(i=1;i<=j;i++)
        {
            printf("%d\n",a[i].v);//输出排序后,反转之前的数字
        }
        return 0;
    }

猜你喜欢

转载自blog.csdn.net/soul_mingling/article/details/86764165
今日推荐