求一个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中的策略模式,完成一个简单地购物车,两种付款策略实例教程
策略模式是一种行为模式.用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略. 策略模式也被称作政策模式.实现过程为,首先定义不同的算法策略,然后客户端把 ...
随机推荐
- Java程序性能优化读书笔记(一):Java性能调优概述
程序性能的主要表现点: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏 启动时间:程序从运行到可以正常处理业务需要花费多少时间 负载承 ...
- ubuntu/deepin制作快捷启动图标
默认情况下系统所有的快捷方式放在/usr/share/applications,打开该目录会看到大量的.desktop文件,每个文件便是一个快捷方式. 有时我们需要自己安装软件,然后添加快捷方式.文件 ...
- 第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)
题目 /* 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始 ...
- C# 基于DotRas的VPN管理
由于工作环境有部分网址被公司屏蔽,特意做了个VPN管理工具,在想访问公司被屏蔽的网址时就开启连接,不用时就关掉.对于做安卓开发的或者.net core类库更新还是很方便的,现在把运行效果展示一下: 点 ...
- Android微信朋友圈全文、收起功能
在众多的社交类软件中,朋友圈是必不可少的,可以与好友.同学等分享自己的日常和有意思的事情,在开发社交类App时,朋友圈发表的内容你不可能让他全部显示,全部显示的话用户体验度会非常不好,这时就要用到全文 ...
- linux python3.5.0安装并替代centos自带的python
CentOS自带2.7.3版本的Python,旧版本无法及时支持新功能,所以要安装更高版本的Python3.5.0. 1.下载#wget https://www.python.org/ftp/pyth ...
- 关于Ansi_Nulls、Quoted_Identifier、Ansi_Padding的用法
--QUOTED_IDENTIFIER 语法SET QUOTED_IDENTIFIER { ON | OFF } 注释当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号 ...
- java byte【】数组与文件读写(增加新功能)
今天在测试直接写的文章: java byte[]数组与文件读写 时,想调用FileHelper类对字节数组以追加的方式写文件,结果无论怎样竟然数据录入不全,重新看了下文件的追加模式,提供了两种方式: ...
- 64位win2003 IIS6运行32位的.NET程序
做web服务迁移,从32位win2003迁移到64位win2003,数据库是32位Oracle在另外一台服务器上. 迁移之后数据库各种连不上,oracle的客户端32位的装完装64位的,odp.net ...
- Mock以及Mockito的使用
mockito http://www.vogella.com/tutorials/Mockito/article.html 原文地址: http://www.open-open.com/lib/vie ...