package com.huahua2.test;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner cin = new Scanner(System.in);
int number=0;
while (cin.hasNext()){
number = Math.abs(cin.nextInt());
String str = Integer.toString(number);
int[] intArray = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
Character ch = str.charAt(i);
intArray[i] = Integer.parseInt(ch.toString());
}
Map<Integer,Integer> map = dec(intArray);
Map<Integer,Integer> sumMap = new HashMap<Integer,Integer>();
Integer reslutArr[] = new Integer[map.size()];
for (int i = 0; i < reslutArr.length; i++) {
reslutArr[i] = map.get(i);
//System.out.println(map.get(i));
sumMap.put(i, sum(map.get(i)));
}
int sMax =map.get(sumMax(sumMap));//递减数中各位数之和最大的数
int max = bubble(reslutArr);//最大的递减数
System.out.println();
System.out.println("递减数中各位数之和最大的数"+sMax);
System.out.println("最大的递减数"+sMax);
System.out.print("两者之和:");
System.out.println(sMax+max);
return;
}
}
//求递减数中各位数之和最大的数在map中的位置
private static int sumMax(Map<Integer, Integer> sumMap) {
// TODO Auto-generated method stub
int mapIndex = 0;
int mapValue = sumMap.get(0);
for (int i = 1; i < sumMap.size(); i++) {
if(mapValue<sumMap.get(i)){
mapValue = sumMap.get(i);
mapIndex = i;
}
}
return mapIndex;
}
//求每个递减数的数字之和
private static int sum(Integer number) {
// TODO Auto-generated method stub
int sum = 0;
while(number!=0){
sum+=number%10;
number /= 10;
}
return sum;
}
//冒泡法求最大的递减数
private static int bubble(Integer[] reslutArr) {
// TODO Auto-generated method stub
int temp;
for (int i = 0; i < reslutArr.length; i++) {
int flag = 0;
for (int j = 0; j < reslutArr.length-i-1; j++) {
if (reslutArr[j]<reslutArr[j+1]) {
temp=reslutArr[j];
reslutArr[j]=reslutArr[j+1];
reslutArr[j+1]=temp;
flag = 1;
}
}
if(flag==0)break;
for (int k = 0; k < reslutArr.length; k++) {
//System.out.print(reslutArr[k]+",");
}
//System.out.println();
}
return reslutArr[0];
}
//求所有的递减数
private static Map<Integer,Integer> dec(int[] intArray) {
// TODO Auto-generated method stub
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
int key = 0;
int index = 0;
for (int i = 0; i < intArray.length; i++) {
int res = 1;
int decrease = intArray[i];
int j = i;
while(res!=-1){
if(index!=0){
decrease = decrease*10 + res;
System.out.print(decrease+" ");
map.put(key, decrease);
key++;
}
int flag = j+1;
if(flag>intArray.length-1){
index = 0;
break;
}
res = fn(intArray[j],intArray[++j]);
if(res!=-1){
index = 1;
}else{
index =0;
}
}
}
return map;
}
private static int fn(int a,int b) {
// TODO Auto-generated method stub
if(a>b){
return b;
}
return -1;
}
}
测试用例:
316354
31 63 54
递减数中各位数之和最大的数63
最大的递减数63
两者之和:126