14. 不正常的排序 Time Limit Exceeded 40 分

题目描述

鱼大大这天睡醒后发现自己穿越到了一个相反异世界,没错,他变成了鱼小小。好在这个异世界并不是任何东西都和原来世界相反的,他还是个男孩子。没得办法,鱼小小只好努力适应异世界的规则,今天他就在学习异世界的数学。

异世界的数字大小并不和原本的世界完全相同,只有数字0123456789的大小还是一样的。经过学习后,鱼小小总结了一些规律:

相反异世界的数字位数越少,数字越大。例:10 > 100; 1234 > 54321

当数字的位数相同时,每一位的权重是从低到高排的,也就是说越低位的数字越重要。例: 12 > 11; 321 < 123

现在鱼小小给了你一些数字,请你帮他一起将这些数字从大到小排序。

输入格式

第一行一个正整数n,表示要进行排序的数字数量
第二行n个正整数,分别为要进行排序的数字

输出格式

一行n个正整数,为进行排序后的数字

样例

Input 1

5 50 20 31 5 102

Output 1

5 31 50 20 102

样例解释

数字5为1位数,最大,数字102为3位数,最小。
其余的皆为2位数,先比较个位,再比较十位。31最大,再是50,最后是20。

数据范围

3≤𝑛≤10003≤n≤1000
所有进行排序的正整数均在int范围内

#include<bits/stdc++.h>
using namespace std;
int n,a[1005];
int wei(int m){
	int cnt=0;
	if(m==0){
		return 1;
	}
	while(m){
		cnt++;
		m/=10;
	}
	return cnt;
}
bool cmp(int a,int b){
	if(wei(a)!=wei(b)){
		return wei(a)<wei(b);
	}
	while(a&&b){
		if(a%10!=b%10){
			return a%10>b%10;
		}
		a/=10;
		b/=10;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	stable_sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}

请问我的代码有什么问题?

image

建议初始化好倒序的数和位数,再排序(我就是这么AC的