题解 AT315 【おとぎの国の高橋君】

· · 题解

点个赞呗~嘿嘿

这道题其实最大的难度就是他每个数字对应的大小跟我们不一样

斯~

那就转换成我们的数字呗,这时有些同学就问了:啊,帅哥帅哥怎么转换呢?????

每个数对应输入的位置就是他的大小,从而就可以转换成我们的大小了

哎呀,可能我说的不是很清楚,那么,代码上见!!!

#include<bits/stdc++.h>
using namespace std;
int a[10];//存一下0~9对应大小
struct no{
    int a,b;//a就是原数值,毕竟又不是让输出我们转换过的数嘛,b就是转换过的数
}b[780];
bool cmd(no a,no b)//按转换过的数从小到大排
{
    if(a.b<b.b)
        return 1;
    return 0;
}
int main()
{
    int i,z,x,y,n;
    for(i=0;i<10;i++)
    {
        scanf("%d",&n);//这里用n是我一开始写的,想省变量
        a[n]=i;//这个数对应的大小
    }
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&x);
        y=0;
        z=0;
        b[i].a=x;//保存原数
        while(x)//这里面就是转换成我们的数
        {
            z=z+a[x%10]*pow(10,y);//高位就要有高位的样子嘛(pow本身是float类型的,但是我们可以强转)
            x/=10;
            y++;//记录一下到第几位啦
        }
        b[i].b=z;//保存转换过的数
    }
    sort(b,b+n,cmd);
    for(i=0;i<n;i++)
    {
        printf("%d\n",b[i].a);//输出,别忘记换行
    }
    return 0;
}

当然,AC记录可不能少,毕竟这是习惯!

觉得不好可以不点差评吗,求求你啦~~~