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