25分,求调
查看原帖
25分,求调
1558170
_chiyu_1236_楼主2024/11/5 20:15
不想看代码的请看这里(我的思路): \colorbox{aqua}{不想看代码的请看这里(我的思路):}

其实样例和我自己造的特殊的数据我都过了

就是不大清楚为什么会出错

本人思路这样子的:

首先用数组记录数据,然后排序

从大到小排序,从每个数的高位开始往地位比较

例如74 和 742

7=7,4=4,所以刚开始他是属于相等的

因为74的长度小于742且"742"末尾的2小于开头的7

所以74排在前面,742在后面

后面按照顺序输出就行了

下面是我的代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int a[1000]={0},n;
bool cmp(int x,int y){
	string A="";
	string B="";
	while(x){
		A+=(x%10+'0');
		x/=10;
	}
	while(y){
		B+=(y%10+'0');
		y/=10;
	}
	reverse(A.begin(),A.end());
	reverse(B.begin(),B.end());
	char ch='=';
	int m=min(A.size()-1,B.size()-1);
	while(m>=0){
		if(A[m]>B[m]){
			ch='>';
			break;
		}
		if(A[m]<B[m]){
			ch='<';
			break;
		}
		m--;
	}
	if(ch=='>')return true;
	if(ch=='<')return false;
	if(A.size()<B.size()){
		if(B[A.size()]>=B[0])return false;
		return true;
	}
	return false;
}
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	sort(a,a+n,cmp);
	for(int i=0;i<n;i++){
		printf("%d",a[i]);
	}
	return 0;
}
2024/11/5 20:15
加载中...