题解 AT315 【おとぎの国の高橋君】
小邱
2021-02-03 23:33:45
点个赞呗~嘿嘿
这道题其实最大的难度就是他每个数字对应的大小跟我们不一样
斯~
### 啊
那就转换成我们的数字呗,这时有些同学就问了:啊,~~帅哥帅哥~~怎么转换呢?????
每个数对应输入的位置就是他的大小,从而就可以转换成我们的大小了
## 哎呀,可能我说的不是很清楚,那么,代码上见!!!
```cpp
#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记录](https://www.luogu.com.cn/record/46104983)可不能少,毕竟这是习惯!
觉得不好可以不点差评吗,求求你啦~~~