现在的位置: 首页 > 综合 > 正文

递减数

2018年05月09日 ⁄ 综合 ⁄ 共 2411字 ⁄ 字号 评论关闭
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

【上篇】
【下篇】

抱歉!评论已关闭.