题目如上,例子v=22312324,c=3,求得最大数为334。
用自己的想法实现了一遍,如果你有更好的方法的话,欢迎不吝赐教。
我的思路是,先将整数v按位存入一个数组,数组低位为整数高位,如num[]={2,2,3,1,2,3,2,4}。求得最大数有c位数,v_max[]={……}。
每次从数组num[]取得一位最大数,存入v_max[]相应位。如求v_max[0],因为v_max有c位,所以可取num[0]~num[len-c-0]中的最大数(len为v的位数),记录最大数下标为num_i,再求v_max[1],可取num[num_i+1]~num[len-c-1]中取最大数,……如此取c个数就得到v_max[]。
1 #include<iostream> 2 using namespace std; 3 4 5 void fun(const int num[],int len,int v_max[],int c,int max_i,int num_i) 6 { 7 if(max_i==c) return; 8 int j=num_i; 9 int temp=-1; 10 for( ;j<=len-c+max_i;j++){ 11 if(temp<num[j]){ 12 temp=num[j]; 13 num_i=j; 14 } 15 } 16 v_max[max_i]=temp; 17 fun(num,len,v_max,c,++max_i,++num_i); 18 } 19 int main() 20 { 21 int v,c,num[100],v_max[100],len; //len为整数v的位数,v_max[]保存最大数 22 v=223123214; 23 int v1=v; 24 len=0; 25 26 while(v1>0){ /*将整数v按位存入数组num[]*/ 27 num[len++]=v1%10; 28 v1/=10; 29 } 30 for(int i=0;i<len/2;i++) 31 swap(num[i],num[len-1-i]); 32 33 cout<<"v="<<v<<endl; 34 while(cin>>c){ 35 if(c>len){ 36 cout<<"error:v<10^c"<<endl; 37 } 38 else{ 39 40 fun(num,len,v_max,c,0,0); 41 for(int i=0;i<c;i++) 42 cout<<v_max[i]; 43 cout<<endl; 44 } 45 } 46 47 }