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 = 51757551 - 1557 = 5994
9954 - 4599 = 5355
5553 - 3555 = 1998
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
7641 - 1467 = 6174
例子2:
9871 - 1789 = 80828820 - 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
- kaprekar常数(6174猜想)
- Kaprekar常数问题
- Kaprekar数
- 数学常数(Wikipedia)
- UVa 974 - Kaprekar Numbers
- 6174猜想
- KeyCode常数用法(vb)
- 南邮 OJ 1598 Kaprekar数
- 定理与猜想(角谷猜想)
- nefu 2 猜想 (哥德巴赫猜想)
- 01背包(降维 + 常数级优化)
- Matlab的内部常数(转)
- 编译原理之常数处理机(一)
- CF 86D 莫队(卡常数)
- R内置常数(Built-in Constants)
- Bug猜想(一)
- Bug猜想(二)
- Bug猜想(三)
- VDMA之MM2S和S2MM接口调试验证
- 我的java.lang.NoClassDefFoundError问题及其解决
- Permission denied (publickey,keyboard-interactive). fatal: The remote end hung up unexpectedly 解决方法
- Android在SQLite中使用事务
- python新技术
- kaprekar常数(6174猜想)
- HTML的绝对定位与相对定位
- Android修改状态栏背景色
- linux开机自启服务的一些技巧
- 静态方法类
- 【cdoj 1349】柱爷大战滑稽王 lcs转lis+二分查找(二分啊)
- 八核King6818开发板U盘挂载查看及Ubuntu烧录
- CSS3 overflow-x 属性
- Mybatis中的resultType和resultMap