整数v,从高位到低位,取c位数,得到最大数 (其中:v>=10^c)
2016-12-10 00:00
246 查看
题目如上,例子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[]。
用自己的想法实现了一遍,如果你有更好的方法的话,欢迎不吝赐教。
我的思路是,先将整数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 }
相关文章推荐
- 整数v,从高位到低位,取c位数,得到最大数 (其中:v>=10^c)
- 编写程序从键盘得到三个整数,找出其中的最大数
- 编写程序从键盘得到三个整数,找出其中的最大数(升级版)
- 有 n 个无序整数( n>10000), 则找出其中最大的 M 个数字( 5<M<10), 所需要的最小时间复杂度为:
- 贪心算法——n个数连接得到最小或最大的多位整数
- <仅是自己做笔记。。。系列-13>输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,写三个函数:1.输入10个数,2.进行处理.3输出10个数
- 大于等于0的正整数或者小数,小数位数最大为5位的正则表达
- N个整数,求其中任意N-1个数的乘积中的最大的一个
- 第七周项目4输入三个整数,输出其中最大值
- 输入整数,偶数偶数,从高位到低位的顺序组成一个新的数
- 10月7日 c语言 函数调用 输入两个整数,要求输出其中值较大者,要求用函数找到最大数
- java编程基础篇 --> 从键盘输入一个整数(1 个 3 位整数),判断其是不是水仙花数。所谓“水仙花数”是 指一个 3 位数,其各位数字立方和等于该数本身。
- 输入3个整数,输出其中的最大值
- 输入4个整数,找出其中最大的数,用函数嵌套调用来处理
- c++实验1-输入3个整数,输出其中的最大值
- 正整数的 二进制表示 中 从低位向高位 第1个0/1出现位置 的计算方法
- 任给十进制的正整数,请从高位到低位逐位输出各位数字(递归算法)
- 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数
- 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。