验证下面结论: 一个各位数字不同且都不为0的N位数X(3<=N<=5), 将组成该数的各位数字重新排列成一个最大数和一个最小数作减法, 其差值再重复前述运算, 若干次后必出现一个N位数Y, 使之重复出现. 例如: X=213, 则有213→321-123=198 981-189=792 982-289=693 963-369=594 954-459=495 954-459=495 这时Y=954. (注意:重复不仅仅是与上一次的数相同,也可能是出现成段的多个数反复重复) 输入一个数X输出相减几次后开始重复出现。样例输入
213
样例输出
5
提示
解释:输入:1234 4321-1234=3087 8730- 378 =8352 8532- 2358= 6174 7641 -1467= 6174
所以减3次后开始循环。输出应为3次
213
样例输出
5
提示
解释:输入:1234 4321-1234=3087 8730- 378 =8352 8532- 2358= 6174 7641 -1467= 6174
所以减3次后开始循环。输出应为3次
解决方案 »
- Java装饰模式
- 图标文件放在项目包中的什么文件夹里面? 我直接放在包中,生成的JAR文件不能显示图标
- JTable的按列查询问题
- ><|||-有一些关于RMI的理解不太清楚,请大家帮忙看一下-|||^_^
- 如何在EditPlus中设置JDK 变量啊?急!
- 送您100分:请java数据库高手赐教:一个对access文件动态操作的问题!!!!!!!
- 大虾版主帮忙看看!!
- 请问weblogic,websphere那个更好些?
- 两个double类型的数到底可否直接比较
- 学完javase后,该继续学什么比较好
- 刚接触java,求iso日期转换问题?thanks
- 求解Java代码this.addKeyListener(MP);这句话什么意思和执行过程,详细代码如下,新手求解
这个题目思路比较清晰:
1、对inputNum进行正序和倒序排列,分别得出max和min;
2、想减得出一个过程数据temp,再inputNum=temp继续循环;
3、指导当前temp和前一个temp相等,终止循环。 (所以此处使用int[2]来判断) public static void main(String[] args) {
int res = 1234;
int[] arrTemp = new int[2];
int n = 0;
for (;; n++) { // 循环迭代
res = doMinus(res);
arrTemp[n & 1] = res; // 交替赋值
if (arrTemp[0] == arrTemp[1]) {
break; // 出现重复,则退出
}
System.out.println("The " + (n + 1) + "th result is: " + res);
}
System.out.println("Loop finish after [" + n + "] times");
}
public static int doMinus(int input) {
int[] arr = int2arr(input);
Arrays.sort(arr);
int max = arr2Int(arr, false); // 倒序-从大到小
int min = arr2Int(arr, true); // 正序-从小到大
return max - min;
}
public static int[] int2arr(int num) {
// 使用String转换,是为了数位可扩展
char[] chrs = Integer.toString(num).toCharArray();
int[] arr = new int[chrs.length];
for (int i = 0; i < chrs.length; i++) {
arr[i] = chrs[i] - '0'; // 相减得出int
}
return arr;
}
public static int arr2Int(int[] arr, boolean isAsc) {
int base = 1;
int sum = 0;
if (isAsc) { // 正序-从小到大
for (int i = arr.length - 1; i >= 0; i--) {
sum += arr[i] * base;
base *= 10;
}
}
else { // 倒序-从大到小
for (int n : arr) {
sum += n * base;
base *= 10;
}
}
return sum;
}
main方法里的不太懂,可以解释下吗
aa(123);
}
public static void aa(int num) {
String[] arr = orgArr(num);
int result2 = getNum(arr, true) - getNum(arr, false);
System.out.println(getNum(arr, true) + "-" + getNum(arr, false) + "=" + result2);
int result1 = 0;
int flg = 1;
while(result2!=result1) {
result1 = result2;
arr = orgArr(result2);
result2 = getNum(arr, true) - getNum(arr, false);
System.out.println(getNum(arr, true) + "-" + getNum(arr, false) + "=" + result2);
flg += 1;
}
System.out.println("减"+(flg-1)+"次后开始循环");
}
public static int getNum(String[] arr, boolean isBig) {
StringBuffer num = new StringBuffer();
if(isBig) {
for(int i=arr.length-1; i>=0 ;i-- ) {
num.append(arr[i]);
}
}else {
for(String a : arr) {
num.append(a);
}
}
return Integer.parseInt(num.toString());
}
/**
* 小到大
* @param num
* @return
*/
public static String[] orgArr(int num) {
String a[] = (num+"").split("");
Arrays.sort(a);
return a;
}