首页 > 学院 > 开发设计 > 正文

计蒜客题库_模拟、循环、暴力枚举_循环数

2019-11-08 02:31:20
字体:
来源:转载
供稿:网友
/*https://nanti.jisuanke.com/t/66循环数循环数是那些不包括0且没有重复数字的整数(比如81362)并且还应同时具有一个有趣的性质, 就像这个例子: 8 1 3 6 2如果你从最左边的数字开始(在这个例子中是8)向右数最左边这个数(如果数到了最右边就回到最左边),你会停止在另一个新的数字(如果没有停在一个不同的数字上,这个数就不是循环数).就像: 8 1 3 6 2 从最左边接下去数8个数字: 1 3 6 2 8 1 3 6 所以我们得到的下一个数字是6。重复这样做 (这次往后6个数字) 并且你会停止在一个新的数字上: 2 8 1 3 6 2, 也就是我们得到了2再这样做 (这次往后数2个): 8 1,我们得到了1.再一次 (这次往后数1个): 3又一次: 6 2 8 这时你回到了起点,在经过每个数字一次后回到起点的就是循环数。如果你经过每一个数字一次以后没有回到起点, 你的数字不是一个循环数。给你一个数字 M, 找出第一个比 M大的循环数, 输出数据保证结果能用一个无符号长整型数装下。输入包括一行,为整数M(0≤M≤100000000)输出包括一行,为第一个比M大的循环数。样例输入81361样例输出81362*//*【解题思路】解法:模拟操作、暴力枚举*/import java.util.*;public class Main {		public static void main(String[] args) {				Scanner in = new Scanner(System.in);				int num = in.nextInt();				while(true){						num++;			int n = num;			int length = 0;						//读取num的位数			while(n != 0){				n /= 10;				length++;			}			int a[] = new int[length];			n = num;						//将num各个位的数提取出来存入数组a			for(int i = length-1;i>=0;i--){				a[i] = n%10;				n /= 10;			}						//检测数字num中各个位的数字是否互不相同			boolean isHasRepeatedNum = false;			for(int i = 0;i<length;i++)				for(int j = i+1;j<length;j++){					if(a[i] == a[j]){						isHasRepeatedNum = true;						break;					}					if(isHasRepeatedNum)						break;				}			if(isHasRepeatedNum)				continue;						//模拟题目中所要求的操作			int count = a[0];//往后数的次数			int currentIndex = 0;//往后数后当前的下标位置			int lengthBackup = length;						while(true){								currentIndex = (currentIndex+count)%length;//采用模运算实现循环计数//				System.out.PRintln("currentIndex="+currentIndex);//				int t = in.nextInt();								//判断当前的数字是否不为0,如若是则将当前位置的数字变为0(标记操作)				if(a[currentIndex] != 0){					count = a[currentIndex];					a[currentIndex] = 0;					lengthBackup--;//标记操作一次后,长度减一,方便后面判断该数组a是否满足题意				}					else					break;							}			if(lengthBackup == 0){				System.out.println(num);				break;			}		}	}}
上一篇:spring注解

下一篇:numpy基本操作

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表