#include<iostream> using namespace std; int main(){ long k,i,j,h; long temp,a[100001],x; cin>>x;//基本结构 for(i=0;i<3;i++){ a[0]=x%10; a[1]=x/10%10; a[2]=x/100; }//模运算,因为它有直接给你位数,所以可以根据数学知识求出各个位数数字 for(i=0;i<3;i++){ //记得加花括号,多个语句要用到这个循环时,就要括起来,表示一部分 k=i;//位数比较的初始位数 for(j=i+1;j<3;j++) //枚举i后的数字进行比较 if(a[k]<a[j]) k=j; //从大到小排列,如果前一个数 比后一个数小,就交换位数(也就是数组的下标) if(k!=i){ temp=a[i]; a[i]=a[k]; a[k]=temp; }//如果数组的k超出了枚举范围 ,就数组前移。其实这一步可有可无,但oj要求要。 } for(i=0;i<3;i++){ h=a[0]*100+a[1]*10+a[2];//排列好后,用最大数为千百位,第二大为十位,其他同理。 } cout<<h<<endl; return 0; }
这道题是接下来几道题综合起来的题,会这个大概都会了。如果不会可以评论提问。主要讲点是模运算求出一个数的各个位数。模运算就是求一个数除以另一个数的余数,不过前提是他要给你位数,不然你不知道最高位是多少,就无法除。
排序其实也可以用数组,如果用选择结构就会在多位数排序中显得麻烦。这个排序很有用。