求一个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中的策略模式,完成一个简单地购物车,两种付款策略实例教程
策略模式是一种行为模式.用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略. 策略模式也被称作政策模式.实现过程为,首先定义不同的算法策略,然后客户端把 ...
随机推荐
- css 样式重置
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, ...
- PHP 数组处理
一:PHP 定义数组: PHP 代码 不能再 空的位置 打字 会报错 定义数组 方式1 $cars=array("Volvo","BMW","T ...
- int装箱比较
看过Effctive-java 这本书的人多少都会记得,int类型的值,-128到127之间的数,会进行缓存. 所以在心间装箱对象 new Integer()的时候,如果在此范围则不会新建对象而是使用 ...
- java线程之多个生产者消费者
温故一下上一节所学习的生产者消费者代码: 两个线程时: 通过标志位flag的if判断和同步函数互斥较好解决两个线程,一个生产者.一个消费者交替执行的功能 类名:ProducterConsumerDem ...
- iis7.0 ExtensionlessUrlHandler-Integrated-4.0解决方法
IIS7.0上部署网站,打开后500错误: 处理程序“ExtensionlessUrlHandler-Integrated-4.0” 在其模块列表中有一个错误模块“ManagedPipelineHan ...
- 用《内网穿山甲》把本地IIS中的站点共享到远程访问
前言: 因为各种原因,我们常常要把本机或局域网中搭建的站点发给远方的人访问,他有可能是测试人员.客户.前端.或领导演示,或是内部系统内部论坛临时需要在远程访问,事件变得很麻烦,要么有公网IP,要么能控 ...
- 覆写hashCode equal方法
1.为什么要重写hashCode方法? 当自己要新建一个class,并要把这个类放到HashMap的时候,需要覆写这两个办法.如果不覆写,放入两个新的对象,可能会是不相等的. 在java的集合中,判断 ...
- Apache Derby倒斗之路-01小道消息
1.DERBY是什么: Apache Derby 是IBM于2004年贡献给Apache软件基金会的数据库,于2005年正式成为开源项目,Derby作为一个基于JAVA的关系型数据库框架,他拥有许多便 ...
- ASP.NET MVC5 实现分页查询
对于大量数据的查询和展示使用分页是一种不错的选择,这篇文章简要介绍下自己实现分页查询的思路. 分页需要三个变量:数据总量.每页显示的数据条数.当前页码. //数据总量 int dataCount; / ...
- 用qemu搭建aarch64学习环境
作者信息 作者: 彭东林 邮箱: pengdonglin137@163.com QQ: 405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linu ...