1017,1004,1015,1007,1005,1014(题目太长,输不进,大家原谅一下)

复制代码
#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; 
}
复制代码

这道题是接下来几道题综合起来的题,会这个大概都会了。如果不会可以评论提问。主要讲点是模运算求出一个数的各个位数。模运算就是求一个数除以另一个数的余数,不过前提是他要给你位数,不然你不知道最高位是多少,就无法除。

排序其实也可以用数组,如果用选择结构就会在多位数排序中显得麻烦。这个排序很有用。

猜你喜欢

转载自blog.csdn.net/qq_41712886/article/details/79293848