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

相关文章

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现