ACM 6174问题
来源:互联网 发布:淘宝千人千面影响 编辑:程序博客网 时间:2024/06/06 04:40
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
思路:
我的想法是构造一个函数,在函数中实现4个数字组合的最大数与最小数的差,然后在main中调用,判断,不相同就把f(b[i])的值赋给b[i]。依次循环,直到找到相同数字。
代码:
import java.util.Arrays;import java.util.Scanner;public class Main {public static int f(int a) {int c = 0, j = 1;int[] b = new int[4];b[0] = a / 1000;b[1] = a % 1000 / 100;b[2] = a % 100 / 10;b[3] = a % 10;Arrays.sort(b);c = (b[3] * 1000 + b[2] * 100 + b[1] * 10 + b[0]) - (b[0] * 1000 + b[1] * 100 + b[2] * 10 + b[3]);return c;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();int[] b = new int[a];int[] j = new int[a];for (int i = 0; i < a; i++) {b[i] = sc.nextInt();}for (int i = 0; i < a; i++) {int c = b[i];for (int k = 1; k < 100; k++) {if (c != f(c)) {c = f(c);j[i]++;}else {break;}}}for(int i=0;i<a;i++){System.out.println(j[i]+1);}}}
0 0
- [ACM]6174问题
- ACM-6174问题
- ACM:蓝桥杯:6174问题
- Acm 57 6174问题
- ACM 6174问题
- 6174问题 --ACM解决方法
- ACM练习—6174问题
- 南阳acm 57-6174问题
- ACM基础题:6174问题
- 南阳理工ACM 题目57 6174问题
- 首做acm问题
- 浙大acm问题1003
- acm 蟠桃计问题
- 一个ACM问题
- 导弹拦截问题ACM
- ACM 任务分配问题
- acm--合并国家问题
- ACM 3984 迷宫问题
- Android基础系列
- vector<vector<int>>的输入
- 第七章:linux文件与目录管理
- 【MIT 公开课】Computer Science and Programing Lession 13
- [网易云课堂]Linux内核分析(八)—— 理解进程调度时机跟踪分析进程调度与进程切换的过程
- ACM 6174问题
- 重放攻击
- python基础入门
- URAL 1992 CVS
- struts2之数据处理的三种方式
- 几道典型的递归算法例题
- HDU 1711 Number Sequence (KMP模板题)
- 十三、JDK的命令行工具
- while(cin>>word) 分析