求一个int型整数的两种递减数之和

2024-05-26 01:58
文章标签 两种 int 整数 递减

本文主要是介绍求一个int型整数的两种递减数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

求一个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;}
}


这篇关于求一个int型整数的两种递减数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003243

相关文章

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

c++11工厂子类实现自注册的两种方法

文章目录 一、产品类构建1. 猫基类与各品种猫子类2.狗基类与各品种狗子类 二、工厂类构建三、客户端使用switch-case实现调用不同工厂子类四、自注册方法一:公开注册函数显式注册五、自注册方法二:构造函数隐形注册总结 一、产品类构建 1. 猫基类与各品种猫子类 class Cat {public:virtual void Printer() = 0;};class

单精度浮点数按存储格式转为整数的程序

///#include<cstdio>//-----------------union int_char{unsigned char ch[4];float i;};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。{printf("单精度浮点数值为:%f\n",x.i,x.i);printf("存储位置从左到右

关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法: 第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过: #include <stdio.h> #include <string.h> int rayatoi(c

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

用异或交换两个整数的陷阱

前面我们谈到了,可用通过异或运算交换两个数,而不需要任何的中间变量。 如下面: void exchange(int &a, int &b) {     a ^= b;     b ^= a;     a ^= b; } 然而,这里面却存在着一个非常隐蔽的陷阱。 通常我们在对数组进行操作的时候,会交换数组中的两个元素,如exchang(&a[i], &b[j]),

苹果账号登录后端验证两种方式 python2

import jsonimport jwt import requests import json import base64def decode_jwt(jwt_token):try:header,payload,sign = jwt_token.split('.')except:return {},{},""header = json.loads(base64.urlsafe_b6

Java中等题-整数替换(力扣)

给定一个正整数 n ,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n 。如果 n 是奇数,则可以用 n + 1或n - 1替换 n 。 返回 n 变为 1 所需的 最小替换次数 。 示例 1: 输入:n = 8输出:3解释:8 -> 4 -> 2 -> 1 示例 2: 输入:n = 7输出:4解释:7 -> 8 -> 4 -> 2 -> 1或 7 ->