求一个int型整数的两种递减数之和(java)--2015华为机试题
题目描述: 给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(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.Iterator;
import java.util.Scanner; public class subtraction {
public static void main(String[] args)
{
Scanner scan =new Scanner(System.in);
String str =scan.nextLine();
diJianShu(str); }
static void diJianShu(String str)
{
char[] arr=str.toCharArray();
ArrayList<Integer> la=new ArrayList<Integer>(); //用来存放递减数
for(int i=0;i<arr.length-1;i++) //寻找递减数
{
if(arr[i]>arr[i+1])
{
String s=""+arr[i]+arr[i+1];
la.add(Integer.parseInt(s));
for(int j=i+1;j<arr.length-2;j++)
{
if(arr[j]>arr[j+1])
{
s=s+arr[j+1];
la.add(Integer.parseInt(s));
break; //防止角标继续往下比
}
break; //防止角标继续往下比
}
s=null;
}
}
// Iterator<Integer> it=la.iterator();
// while(it.hasNext()){
// System.out.print(it.next()+" ");
// }
String[] a=new String[la.size()];//将集合里的元素转化成字符串,再转化成字符数组,方便下面求递减数各位数之和
int max=0; //记录最大递减数
for(int i=0;i<la.size();i++)
{
if(la.get(i)>max)
{
max=la.get(i); //找到最大递减数
}
a[i]=la.get(i).toString(); // 将集合里的元素转化成字符串
}
String ss=null;
int max2=0; //记录最大递减数之和
for(String string :a)
{ //字符串转化为字符数组,方便下面求递减数各位数之和
if(string!=null)
{
char[] ch=string.toCharArray();
int num=0;
for(int i=0;i<ch.length;i++)
{
num=num+ch[i]-48;
}
if(num>max2)
{
max2=num; //找到最大递减数之和
ss=string; //记录下最大递减数之和的字符串;
}
} }
int sum=max+Integer.parseInt(ss);
System.out.println(sum);
}
}
逻辑思路:
1、输入字符串并读取;
2、判断输入的是否为负数;(这步省略了,在一开始编的时候加进去了,后来删掉了)
3、判断递减数;(这步很关键,逻辑要清晰,我是用了嵌套for循环,改错的时候找了好久)
4、将得到的递减数重新装进一个集合里;
5、判断最大递减数;
6、判断数字之和最大的递减数。
作为一个近期正在刷题的初学者来说,这题我从上午一直编到下午,这题也没有那么难,但却是自己在看了网上其他答案觉得都不好,然后自己理了理逻辑就开始码了起来,虽然花费了很长时间,而且改错改了一个多小时,但是还是很有成就感的。毕竟花了那么长时间,就作为第一篇帖子分享给大家吧,希望对大家有用。
求一个int型整数的两种递减数之和(java)--2015华为机试题的更多相关文章
- 求一个int型整数的两种递减数之和(华为2015笔试题及答案)
给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同 ...
- 判断一个int 型整数 是否为回文数
leetcode 上的题目 Determine whether an integer is a palindrome. Do this without extra space. 由于不能使用额外空间, ...
- 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 输入例子 ...
- 给一个int型整数,如何将这个整数的奇偶位互换
题目: 假设一个8为整数是(10101100)b那么奇偶互换之后就是(01011100)b.假设机器是32位的 注意: 8位中最低位开始数,最低位是第0位,是偶数为,次低位时第1位,是偶数位. 做法: ...
- 牛客网2016.4.11(两个数相加为sum/计数一个int型的二进制有多少个1/二叉树是否左右对称)
求最小的两个数相加为sum //求最小的两个数相加为sum public ArrayList<Integer> FindNumbersWithSum(int [] array,int su ...
- 假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么?
假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么? 在执行这条语句的过程中,保存在result中的值被读 ...
- Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习)
Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习) ...
- Android一个ListView列表之中插入两种不同的数据
http://www.cnblogs.com/roucheng/ Android一个ListView列表之中插入两种不同的数据 代码如下: public class ViewHolder{ Butto ...
- Java中的策略模式,完成一个简单地购物车,两种付款策略实例教程
策略模式是一种行为模式.用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略. 策略模式也被称作政策模式.实现过程为,首先定义不同的算法策略,然后客户端把 ...
随机推荐
- 游戏音频技术备忘 (三) 集成Wwise到Unreal Engine
当前受众较广的商业游戏引擎有 Unreal Engine.Unity.cocos2d-x等,在音频领域的第三方中间件则有Wwise.FMOD.Criware等,言多且烦,我们首先集成Wwise到 Un ...
- 循环语句——do…while语句
一.do while语句结构 do { 执行语句 } while (条件表达式); 条件表达式必须是trur或false 二.do while语句特点 不论条件是否满足,都先执行一次执行语句 三.示例 ...
- Python - Python2与Python3合理共存Windows平台
Install Python2 and Python3 Python 2.7.13 - Windows x86-64 MSI installer Python 3.6.0 - Windows x86- ...
- 情人节,教大家使用css画出一朵玫瑰花。
情人节到了,给大家来一朵高端的玫瑰花. 在网上看到的一个canvas实现的玫瑰花,效果很好,但是代码被压缩过,也没有注释,看的云里雾里的. 今天我教大脚用CSS来实现一朵玫瑰花. 先看效果 首先我们画 ...
- 使用bootstrap table小记(表格组件)
前言 新的一年悄然到来,生活依旧.最近一周大热的赵雷风,一首<成都>,一首<理想>再次把民谣展示在国人面前.歌词着实写的不错. 理想,你今年几岁 你总是诱惑着年轻的朋友 你总是 ...
- java线程之多个生产者消费者
温故一下上一节所学习的生产者消费者代码: 两个线程时: 通过标志位flag的if判断和同步函数互斥较好解决两个线程,一个生产者.一个消费者交替执行的功能 类名:ProducterConsumerDem ...
- Android灯光系统--深入理解背光灯
Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...
- View Controller Transition:京东加购物车效果
冬天已经过去了,阳光越来越暖洋洋的了.还记得上学的时候,老师总说"春天是播种的季节",而我还没在朋友圈许下什么愿望.一年了,不敢想象回首还能看到点什么,所以勇往直前.当被俗世所扰, ...
- 一步一步在Windows中使用MyCat负载均衡 上篇
传统关系型数据库的分布式开发通常需要自己做,不仅耗时耗力而且效果不是很理想,当想快速搭建时,最初想到的是看有没有第三方,网上牛人还是很多的,做得比较好的其中之一Mycat,它是开源的分布式数据库系统, ...
- Angular.js!(附:聊聊非原生框架项目)
最近,为了项目接触了一个很火的前端框架Angular.js,下面就Angular做一个简介吧(大牛请绕步,只针对没有接触过angular的人). Angular.js是一款精简的前端框架,如果要追溯它 ...