输入1-99中的数字,并组合成最大的数
例: 输入:9,46,42,4,45,输出:94645442
方法: 采用冒泡排序,两两比较。同为个位、同为十位直接比较。一个个位,一个十位则变成3位数比较大小。
例: 7与76等同于比较:7 x 100+76> 76 x 10+7
因为776>767所以不交换位置。
代码建议运行理解:
#include
using namespace std;
int main(){
int i,j,t;
int n;
int k=0;
cout<<"请指定数组大小:"<<endl;
cin>>n;
int arr[n];
cout<<"请输入"<<n<<"个数字:"<<endl;
//确认数组大小
while(k<n){
cin>>arr[k];
k++;
}//输入数组
for(i=0;i<n;i++){
for(j=0;j<n-i;j++){
if(arr[j]>=10 && arr[j+1]<10 || arr[j]<10 && arr[j+1]>=10){
//如果一个是个位数一个是十位数
int x=10,y=10;
//定义量级
while(x <= arr[j])
x*=10;
while(y <= arr[j+1])
y*=10;
//将大于等于10的数对应的量级乘以10,
if(arr[j]*y+arr[j+1] < arr[j+1]*x+arr[j]){
//化成3位数比较大小,如果组合后 arr[j]arr[j+1] > arr[j+1]arr[j] 则不换,否则交换
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
else if(arr[j]<arr[j+1]){
//同为个位数,或者同为十位数比较
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}//两两比较并排序
for(i=0;i<n;i++){
cout<<arr[i];
}
return 0;
}
图片好看一点:
如有问题请指正,谢谢!