面试题4——求一个int型整数的两种递减数之和
来源:互联网 发布:美萍软件介绍 编辑:程序博客网 时间:2024/05/20 04:51
题目来源:华为机试题
**
求一个int型整数的两种递减数之和
**
描述:
给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数;2.递减数中各位数之和最大的数)之和。
递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同的情况。
最大递减数:所输入整数的所有递减数中值最大的一个。 如: 75345323,递减数有:75,753,53,53,532,32。那么最大的递减数为753。
各位数字之和最大的递减数: 如75345323中的各递减数:75各位数之和=12(7+5=12),753各位数之和=15(7+5+3=15),53各位数之和=8(5+3=8),532各位数之和=10(5+3+2=10),32各位数之和=5(3+2=5)。那么各位数字之和最大的递减数为753。
输出结果=最大递减数+各位数之和最大的递减数。(1506=753+753)
运行时间限制: 无限制
内存限制: 无限制
输入:
一个int型整数。如:75345323
输出:
一个int型整数。如:1506
样例输入:
75345323
样例输出:
1506
我的答案(C++):
#include<iostream>#include<math.h>using namespace std;/* 函数功能:将一个整数的各位存到整形数组中,从低往高 */int Num2Array(int num,int *array){ int i; for(i=0;num>0;i++) { array[i] = num%10; num /= 10; } return i;}/* 函数功能:将整形数组里的数拼成一个整数 start是高位,end是低位 */int Bit2Num(int arr[], int start,int end){ int num=0; for(int i=start;i<=end; i++) { num+=arr[i] * pow(10.0,i-start); // pow() 幂运算 } return num;}/* 函数功能:将整形数组中各位数相加 */int BitSum(int array[],int start,int end){ int sum=0; for(int i=start;i<=end;i++) { sum += array[i]; } return sum;}int main(){ int num; cin>>num; if(num<0) num=0-num; int array[100]; // 用来存放整数的各个十进制位上的数 int len= Num2Array(num , array); int start = len -1; int end ; int maxDecNum=0; // 用来存放最大递减数 int maxSumNum=0; // 用来存放递减数中各位相加最大的和 int maxSum=0; // 用来存放各位相加和最大的递减数 while(start >=0) { end = start-1; while(end >= 0 && array[end]< array[end+1]) { int num = Bit2Num(array,end,start); int temp = BitSum(array,end,start);/* cout<<"num="<<num<<endl; cout<<"temp="<<temp<<endl; cout<<"maxSum="<<maxSum<<endl; cout<<"maxSumNum="<<maxSumNum<<endl; cout<<"maxDecNum="<<maxDecNum<<endl;*/ if(maxSum <temp) { maxSum = temp; maxSumNum = num; } if(maxDecNum < num) { maxDecNum = num; } --end; } --start; } cout<<maxDecNum+maxSumNum<<endl; return 0;}
0 0
- 面试题4——求一个int型整数的两种递减数之和
- 求一个int型整数的两种递减数之和(java)--2015华为机试题
- 求一个int型整数的两种递减数之和
- 求一个int型整数的两种递减数之和
- 华为模拟题二求一个int型整数的两种递减数之和
- 2015华为实习生招聘机试模拟考1之求一个int型证书的两种递减数之和
- 面试题---两数之和
- 面试题-求一个数的平方根
- 面试题之编程之美 求一个整数中二进制数1的个数
- [经典面试题]给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数
- 面试题求一个整数中二进制1的个数
- 求从一个整数数组中两个数之和为m的两个数
- 一道面试题(求一个unsigned int 数的二进制表示中有多少个1?)
- 一个整数的各位数之和
- 计算一个整数的各位数之和
- 微软面试题:求两升序排序数组两两数字之和中,最小的k个值
- 读博客”求一个整数中二进制数1的个数“两种方法分析
- 一个面试题,求数组中第二大的数
- IntentFilter
- Struts2中的ModelDriven机制及其运用
- Jsoup网页抓取技术
- IOS自定义表格视图
- java---Spring
- 面试题4——求一个int型整数的两种递减数之和
- 我的java学习笔记(5)关于对象构造
- [****Camp Day 1]C. Control Point(乱搞)
- 安装Sublime Text 3插件的方法
- OJ 1185 特殊排序
- 黑马程序员——Java基础知识——面向对象(二)
- Hadoop学习笔记之Hadoop简介
- 面向对象学习(4)
- 利用旋转矩阵简便旋转二位矢量(SDacm4A题解)