题目描述
小明有一个数字x,现在他想把x的各个数字调换位置,得到一个最大的数和一个最小的数,你能帮帮他吗?
注:小明不希望数字的最高位是0。
输入
输入一个数x;(0≤x≤1000000)
输出
输出两个数,分别表示调换后的最大数和最小数,以空格隔开;
样例输入
9037
样例输出
9730 3079
【思路分析】
1.对输入的数x进行数字分离,分离的数字存入一维数组a[i]中;
2.用sort函数排序;
3.倒序输出重组后最大的数字;
4.输出最小的数字之前,先处理数字0,数字0和最小的数字交换位置;
5.输出重组后最大的数字。
#include<bits/stdc++.h>
using namespace std;
int n,i,k,a[100];
int main(){
cin>>n;
while(n)
{
a[i]=n%10;//个位
n/=10;//去除个位
i++;
}
sort(a,a+i);
for(int j=i-1;j>=0;j--)
cout<<a[j];
cout<<" ";
for(int j=0;j<i;j++)
{
k=j;//k用来记录非0的数字位置
if(a[j]==0)
{
while(a[k]==0)//遇到数字0,就继续查找下一个,直到找到非0数字,把它的位置记录到k中
k++;
swap(a[k],a[j]);//遇到非零的数字和第一个0交换位置
j=k;
break;//处理完成就跳出循环
}
}
for(int j=0;j<i;j++)
cout<<a[j];
return 0;
}