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

小邱

2021-02-03 23:33:45

Solution

点个赞呗~嘿嘿 这道题其实最大的难度就是他每个数字对应的大小跟我们不一样 斯~ ### 啊 那就转换成我们的数字呗,这时有些同学就问了:啊,~~帅哥帅哥~~怎么转换呢????? 每个数对应输入的位置就是他的大小,从而就可以转换成我们的大小了 ## 哎呀,可能我说的不是很清楚,那么,代码上见!!! ```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)可不能少,毕竟这是习惯! 觉得不好可以不点差评吗,求求你啦~~~