题目描述: 给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(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华为机试题的更多相关文章

  1. 求一个int型整数的两种递减数之和(华为2015笔试题及答案)

    给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同 ...

  2. 判断一个int 型整数 是否为回文数

    leetcode 上的题目 Determine whether an integer is a palindrome. Do this without extra space. 由于不能使用额外空间, ...

  3. 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

    题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 输入例子 ...

  4. 给一个int型整数,如何将这个整数的奇偶位互换

    题目: 假设一个8为整数是(10101100)b那么奇偶互换之后就是(01011100)b.假设机器是32位的 注意: 8位中最低位开始数,最低位是第0位,是偶数为,次低位时第1位,是偶数位. 做法: ...

  5. 牛客网2016.4.11(两个数相加为sum/计数一个int型的二进制有多少个1/二叉树是否左右对称)

    求最小的两个数相加为sum //求最小的两个数相加为sum public ArrayList<Integer> FindNumbersWithSum(int [] array,int su ...

  6. 假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么?

    假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么? 在执行这条语句的过程中,保存在result中的值被读 ...

  7. Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习)

    Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习)                                                           ...

  8. Android一个ListView列表之中插入两种不同的数据

    http://www.cnblogs.com/roucheng/ Android一个ListView列表之中插入两种不同的数据 代码如下: public class ViewHolder{ Butto ...

  9. Java中的策略模式,完成一个简单地购物车,两种付款策略实例教程

    策略模式是一种行为模式.用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略. 策略模式也被称作政策模式.实现过程为,首先定义不同的算法策略,然后客户端把 ...

随机推荐

  1. [html5] 学习笔记-Canvas 绘制渐变图形与绘制变形图形

    在 HTML5 中,使用 Canvas API 绘制图形的知识,可以对绘制图形进行处理,包含使用 Canvas API 绘制渐变图形,使用 Canvas API 的坐标轴变换处理功能绘制变形图形.其中 ...

  2. Python学习--17 访问数据库

    实际开发中,我们会经常用到数据库. Python里对数据库的操作API都很统一. SQLite SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以 ...

  3. .Net程序员学用Oracle系列(15):DUAL、ROWID、NULL

    1.DUAL 表 2.ROWID 类型 2.1.利用 ROWID 查询数据 2.2.利用 ROWID 更新数据 3.NULL 值 3.1.NULL 与空字符串 3.2.NULL 与函数 3.3.NUL ...

  4. 使用devstack搭建openstack Newton 版本的坑

    国外源访问速度慢怎么办? 使用国外源,加之带宽紧张,搭建过程是很累的,这里推荐大家使用一下源: devstack包源.:http://git.trystack.cn pip源: [global] in ...

  5. C语言 一维数组叠加为二维数组样例

    这里参看memcpy的用法,将一个一维整型数组不停的叠加为二维数组 使用宏定义来控制二维数组的行列 代码如下: #include <stdio.h> #include <stdlib ...

  6. 移动端touch实现下拉刷新

    移动端实现下拉刷新 第一部分:四个touch事件 1.touchstart:只要将手指放在了屏幕上(而不管是几只),都会触发touchstart事件. 2.touchmove: 当我们用手指在屏幕上滑 ...

  7. 关于DOM的理解

    每个载入浏览器的HTML文档都会生成一个Document对象 Document对象使我们可以从脚本中对HTML中的所有元素进行访问 DOM实际上是以面向对象方式描述的对象模型,它将文档建模为一个个对象 ...

  8. PPT中翻书动画的制作

    一.新建一个空白的PowerPoint文档.   二.制作两个页面:   1.点击“自选图形”右边的小三角,选择“基本图形”下的“折角形”图形,在PowerPoint中画出一个书页样的图形,宽度最好小 ...

  9. java初级开发程序员(第三单元)

    1.if基本选择结构: 语法: if(条件){     //程序执行时,先判断条件.当结果为true(真)时,程序先执行大括号的代码块,再执行if结构(即{}部分)后面的代码.当结果为false(假) ...

  10. JVM内存分配与回收策略

    对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配. 当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC. Minor GC:新生代GC,指发生在新生代的垃圾收集动作 ...