ACM练习—6174问题

来源:互联网 发布:js删除json数组 对象 编辑:程序博客网 时间:2024/06/12 05:13

6174问题

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
11234
样例输出
4
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner s = new Scanner(System.in);int sum = s.nextInt();  // n组数据int[] arr = new int[sum];        int[] num = new int[sum];for (int i = 0; i < num.length; i++) {num[i]+=2;}for (int i = 0; i < sum; i++) {arr[i] = s.nextInt();}for (int i = 0; i < arr.length; i++) {int temp=0; int temp1=0;temp = retBig(arr[i]) - retBut(arr[i]);while (true) {temp1 = temp;temp = retBig(temp) - retBut(temp);if(temp == temp1){break;}num[i]++;}}for (int i = 0; i < num.length; i++) {System.out.println(num[i]);}}public static int retBig(int a){        // 求出最高位int[] arrSoft = new int[4];// 转换为char数组并从大到小排序arrSoft[0] =  a/1000;arrSoft[1] =  a%1000/100;     arrSoft[2] =  a%100/10;arrSoft[3] =  a%10/1;for (int j = 1; j < 4; j++) {          for (int j2 = 0; j2 < 4 -j; j2++) {if(arrSoft[j2]<arrSoft[j2+1]){int temp;temp = arrSoft[j2];arrSoft[j2] = arrSoft[j2+1];arrSoft[j2+1] =  temp;}}}int temp = 1000; // char 数组转换为intint num = 0;for (int j = 0; j < arrSoft.length; j++) {num = num + arrSoft[j]*temp;temp = temp/10;}return num;}public static int retBut(int a){  // 求出最低位int[] arrSoft = new int[4];// 转换为char数组并从大到小排序arrSoft[0] =  a/1000;arrSoft[1] =  a%1000/100;     arrSoft[2] =  a%100/10;arrSoft[3] =  a%10/1;for (int j = 1; j < 4; j++) {          for (int j2 = 0; j2 < 4 -j; j2++) {if(arrSoft[j2]>arrSoft[j2+1]){int temp;temp = arrSoft[j2];arrSoft[j2] = arrSoft[j2+1];arrSoft[j2+1] =  temp;}}}int temp = 1000; // char 数组转换为intint num = 0;for (int j = 0; j < arrSoft.length; j++) {num = num + arrSoft[j]*temp;temp = temp/10;}return num;}}

0 0
原创粉丝点击