java如何生成限制相似数和十次幂的随机数
We need to generate random numbers within a certain digit range with few restrictions
e.g. For double digit range 11 - 99, the resultant output should not include all like numbers [11,22,33,44,...99] and multiples of 10 [20,30,40....90]
The resultant output should be [12,13,14,15,16,17,18,19,21,23,...98]
注:该功能也应适用于其他数字范围(例如,101-999范围内的3位数字范围和1001-9999范围内的4位数字范围)
我们很难识别类似的数字(例如11、22、33、44、55、66、77、88、99、111、222、333、3333……)
编辑1:
protected static List<Integer> fetchRandIntegers(int min, int max, int howMany, boolean randomize) {
// We need to reverse minimum, maximum values for negative ranges
if (min > max) {
int tmp = min;
min = max;
max = tmp;
}
List<Integer> allNumbers = new ArrayList<Integer>();
for (int i = min; i <= max; i++) {
allNumbers.add(i);
}
if (randomize) {
...
}
return allNumbers;
}
# 1 楼答案
你愿意使用多大的查找表?(将连续范围映射到没有禁止值的较大范围。)
或者检查一下(如果低于100,10和11的倍数,如果低于1000,111和100的倍数,等等),如果鱼太小,把它扔回去
# 2 楼答案
要确定整数
i
的所有数字是否相同:i
转换为string
并比较字符,或比如:
要确定整数
i
是否是10
(1001000)的倍数:i modulo 10
是否为0
李># 3 楼答案
两个简单的选择:
后者可能效率更高(不需要循环生成然后丢弃的数字),但实现起来更复杂
编辑:下面是一种检查整数中所有数字是否相同的方法:
(可能有一种更优雅的方式来编写循环,但我还没有喝咖啡……模11或111或1111等方法也非常简洁。)
# 4 楼答案
这个程序也会给出答案
我知道这个项目相当大,只是为了给大家一个想法,我给出了这个。但我相信它会给出正确的答案