kaprekar常数(6174猜想)

来源:互联网 发布:ichart.js下载 编辑:程序博客网 时间:2024/05/22 13:30

6174猜想 :

1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数, 只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174.

例子1:

5200 - 0025 = 5175
7551 - 1557 = 5994
9954 - 4599 = 5355
5553 - 3555 = 1998
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
7641 - 1467 = 6174

例子2:

9871 - 1789 = 8082
8820 - 0288 = 8532

8532 - 2358 = 6174


Java实现:

import java.util.Scanner;public class Main{    public static void main(String[] args){            Scanner sc = new Scanner(System.in);        int data = sc.nextInt();        compute(data,0);            }        public static void compute(int data,int old){    if(data >= 10000 || data < 1000){    System.out.println("输入数据不是4位数!");    return;    }        int[] bit = new int[4];    int index = 3;    while(data > 0){    bit[index] = data % 10;    data = data / 10;    index--;    }        boolean flag = true;    for(int i = 0; i < 3; i++){    if(bit[i] != bit[i + 1]){    flag = false;    break;    }    }        if(flag){    System.out.println("输入的数据各位数值一样!");    return;    }        MinMax mm = getMinMax(sort(bit));    int sub = mm.getMax() - mm.getMin();    System.out.println(mm.getMax() + "-" + mm.getMin() + "=" + sub);        if(sub == old){    return;    }    compute(sub,sub);            }        //因为排序数据比较少,直接用选择排序----升序    public static int[] sort(int[] bit){    int len = bit.length;    for(int i = 0; i < len; i++){    int tmp = i;    for(int j = i;j < len; j++){    if(bit[j] < bit[tmp]){    tmp = j;    }    }    swap(bit, i, tmp);    }    return bit;    }        //交换数组两个位置的值    public static void swap(int[] bit, int a, int b){    int tmp = bit[a];    bit[a] = bit[b];    bit[b] = tmp;    }        public static MinMax getMinMax(int[] bit){    int max = 0;    int min = 0;    for(int i = 0; i < bit.length; i++){    min = min * 10 + bit[i];    max = max * 10 + bit[bit.length - i - 1];    }        MinMax mm = new MinMax();    mm.setMax(max);    mm.setMin(min);        return mm;    }}class MinMax{private int min;private int max;public int getMin() {return min;}public void setMin(int min) {this.min = min;}public int getMax() {return max;}public void setMax(int max) {this.max = max;}}





1 0
原创粉丝点击