求一个int型整数的两种递减数之和
来源:互联网 发布:hexo 添加js 编辑:程序博客网 时间:2024/05/08 16:11
求一个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答案提示:
题目不算严谨,做题的过程中我做了一些假设,总的来说没啥技术含量,单纯的队列结构的使用(指的是思想上的)
import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Scanner;//1找到递减数//2找递减数中最大的//3找到递减数中各位数和最大的数//返回结果public class Main {public static void main(String[] args) {// 数据输入 消除负数 把正整数转化成charArray便于处理Scanner in = new Scanner(System.in);int inputNumber = in.nextInt();inputNumber = Math.abs(inputNumber);char[] inputNumbers = (inputNumber + "").toCharArray();List<Integer> decreasingNumbers = findDecreasingNumbers(inputNumbers);// 封装异常输入if (decreasingNumbers.size() == 0) {System.out.println(0);return;}Integer[] decreasingNumbersArray = decreasingNumbers.toArray(new Integer[0]);Arrays.sort(decreasingNumbersArray);int maxDecreasingNumber = decreasingNumbersArray[decreasingNumbersArray.length - 1];int decreasingNuberWithMaxNumberSum = getDecreasingNuberWithMaxNumberSum(decreasingNumbersArray);int sum = maxDecreasingNumber + decreasingNuberWithMaxNumberSum;System.out.println(sum);}// 找到所有递减数// 这里用char去存取数字 所以赋给Integer的时候需要减掉48public static List<Integer> findDecreasingNumbers(char[] inputNumbers) {ArrayList<Integer> decreasingNumbers = new ArrayList<Integer>(20);// 存放中间数据ArrayList<Integer> cache = new ArrayList<Integer>(20);cache.add(inputNumbers[0] - 48);for (int i = 1; i < inputNumbers.length; i++) {if (inputNumbers[i] < inputNumbers[i - 1]) {// 如果满足递减规则 那么与前一位构成递减数的字符串也能满足for (int j = 0; j < cache.size(); j++) {cache.set(j, cache.get(j) * 10 + inputNumbers[i] - 48);decreasingNumbers.add(cache.get(j));}} else {cache.clear();}cache.add(inputNumbers[i] - 48);}decreasingNumbers.trimToSize();return decreasingNumbers;}// 这边预定义一下 如果存在多个各位数和最大的递减数 那么我们将返回最大的结果// 输入是一个 不为空的有序正数集public static int getDecreasingNuberWithMaxNumberSum(Integer[] decreasingNumbersArray) {int result = 0;int maxSum = 0;int temp = 0;for (int i = 0; i < decreasingNumbersArray.length; i++) {temp = getNumberSum(decreasingNumbersArray[i]);if (maxSum > temp) {continue;} else {maxSum = temp;result = decreasingNumbersArray[i];}}return result;}// 返回各位数字的和private static int getNumberSum(int inputInteger) {int result = 0;while (inputInteger > 0) {result += inputInteger % 10;inputInteger /= 10;}return result;}}
0 0
- 求一个int型整数的两种递减数之和
- 面试题4——求一个int型整数的两种递减数之和
- 求一个int型整数的两种递减数之和
- 求一个int型整数的两种递减数之和(java)--2015华为机试题
- 华为模拟题二求一个int型整数的两种递减数之和
- 2015华为实习生招聘机试模拟考1之求一个int型证书的两种递减数之和
- 求从一个整数数组中两个数之和为m的两个数
- 一个整数的各位数之和
- 计算一个整数的各位数之和
- 读博客”求一个整数中二进制数1的个数“两种方法分析
- 求输入的一个整数的各位数字之和
- 笔试题:写一个有序整数数组两两之和等于某个数所有组合
- 求一个整数各个位上的数字之和
- 【C语言】求一个整数的因子之和
- 求一个整数的各位数字之和,位数
- 求一个三位整数的个位、十位、百位之和
- 求一个整数的绝对值(两种方法)
- 输入一个数,求这个数的各位数字之和
- C语言 求解一元二次方程
- 最长连续相异子序列 ----2014年湖南科技大学校赛
- windows64 mysql设置root密码及开启服务
- 在keil5上简单学习自带操作系统RTX
- 迅雷2013C++笔试卷B
- 求一个int型整数的两种递减数之和
- 【C语言】数据类型
- ecilipse的安装及使用。记得.cpp后缀
- 01-复杂度1. 最大子列和问题(20)
- 二进制中1的个数
- python不支持的类型
- 模的和 -----2014年湖南科技大学校赛
- Java——内部类
- 算法导论第一章