大脸驴

做笔记是个好习惯

算法题练习系列之(十二): 数字黑洞

--------------------------------------------------------------------------------------------------------------------------------------------------------

时间限制:1秒  空间限制:32768K  代码长度限制 100 KB

--------------------------------------------------------------------------------------------------------------------------------------------------------

题目描述

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个
数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇
的数字也叫Kaprekar常数。
    例如,我们从6767开始,将得到
    7766 - 6677 = 1089
    9810 - 0189 = 9621
    9621 - 1269 = 8352
    8532 - 2358 = 6174
    7641 - 1467 = 6174
    ... ...
        
现给定任意4位正整数,请编写程序演示到达黑洞的过程。
输入描述:
输入给出一个(0, 10000)区间内的正整数N。
输出描述:
如果N的4位数字全相等,则在一行内输出“N - N = 0000”;否则将计算的每一步在一行内输出,直到6174作为差
出现,输出格式见样例,每行中间没有空行。注意每个数字按4位数格式输出。
输入例子:
6767
输出例子:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174

--------------------------------------------------------------------------------------------------------------------------------------------------------

实现思路:

(1).将输入的数字转换为标准格式字符串(4位数,不够的补0);

(2).将数字字符串转换为字符数组,切对其按照数字字符从大到小进行排序得到M,从小到大排序得到N;

(3).将字符数组转换为数字进行相减,得到结果,判断是否为6174或0;如果是,结束;否,将结果作为输入数字继续执行该过程。

--------------------------------------------------------------------------------------------------------------------------------------------------------

package com.biyao.algorithm.niuke.a1;
import java.util.Scanner;
public class Main_a1_009 {
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int num = scan.nextInt();
            String numStr = formatNum(num);
            int res = 0;
            while(res != 6174){
                char[] numCharArr = numStr.toCharArray();
                int[] numArr = new int[numCharArr.length];
                for (int i = 0; i < numArr.length; i++) {
                    numArr[i] = (int)(numCharArr[i]-48);
                }
                sort(numArr,0);
                int m = getNumByArr(numArr);
                sort(numArr,1);
                int n = getNumByArr(numArr);
                res = m - n;
                System.out.println(formatNum(m) + " - " + formatNum(n) + " = " + formatNum(res));
                if(res == 0){
                    break;
                }
                numStr = formatNum(res);
            }
        }
    }
    
    
    public static int getNumByArr(int[]numArr){
        int num = 0;
        for (int i = 0; i < numArr.length; i++) {
            num = num*10 + numArr[i];
        }
        return num;
    }
    
    public static String formatNum(int num){
        if(num >= 100 && num < 1000){
            return "0" + num;
        }else if(num >= 10 && num < 100){
            return "00" + num;
        }else if(num >= 0 && num < 10){
            return "000" + num;
        }else{
            return "" + num;
        }
    }
    
    //type = 1 升序 ;type=0降序
    public static void sort(int[]numArr,int type){
        if(numArr == null || numArr.length == 0){
            return ;
        }
        for (int i = 0; i < numArr.length; i++) {
            for (int j = i; j < numArr.length; j++) {
                if(type == 1){
                    if(numArr[i] > numArr[j]){
                        int temp = numArr[i];
                        numArr[i] = numArr[j];
                        numArr[j] = temp;
                    }
                }else if(type == 0){
                    if(numArr[i] < numArr[j]){
                        int temp = numArr[i];
                        numArr[i] = numArr[j];
                        numArr[j] = temp;
                    }
                }
            }
        }
    }

}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maofenghua/article/details/75003454
个人分类: 算法题练习
上一篇算法题练习系列之(十一):锤子剪刀布
下一篇算法题练习系列之(十三): 月饼
想对作者说点什么? 我来说一句

多目标黑洞算法工具箱matlab

2018年01月24日 6.3MB 下载

C++黑洞数字 很详细哦

2012年03月22日 2KB 下载

黑洞算法简单函数寻优matlab

2018年01月31日 966B 下载

数学黑洞的程序,很实用哦

2009年11月22日 139KB 下载

js 黑洞资源特效

2016年12月15日 251KB 下载

acm练习题目之原题

2013年11月15日 52KB 下载

haskell 一些练习

2015年10月10日 5KB 下载

C++算法分析及习题

2009年03月30日 5.66MB 下载

新免杀版黑洞2004.rar

2010年01月12日 7.72MB 下载

没有更多推荐了,返回首页

关闭
关闭