有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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;

}


共 (4) 个答案

  1. # 1 楼答案

    你愿意使用多大的查找表?(将连续范围映射到没有禁止值的较大范围。)

    或者检查一下(如果低于100,10和11的倍数,如果低于1000,111和100的倍数,等等),如果鱼太小,把它扔回去

  2. # 2 楼答案

    要确定整数i的所有数字是否相同:

    • i转换为string并比较字符,或
    • 反复进行模运算并除以10,检查所有模是否相同

    比如:

    public boolean hasAllDigitsSame (int i)
    {
        int a = i ;
        int m = a % 10 ;
        int mm = m ;
        while(a > 0)
        {
            m = a % 10;
            if (m != mm)
              return False ;
            a /= 10 ;
        }
        return True ;
     }
    

    要确定整数i是否是10(1001000)的倍数:

    • 检查i modulo 10是否为0
  3. # 3 楼答案

    两个简单的选择:

    • 生成范围内的任何随机数,然后重复(一次又一次…)如果你选择了一个“禁止”的
    • 计算出你实际拥有多少个合格数字,生成一个[0..size]范围内的数字,然后将其映射到一个合格数字上

    后者可能效率更高(不需要循环生成然后丢弃的数字),但实现起来更复杂

    编辑:下面是一种检查整数中所有数字是否相同的方法:

    public boolean checkForAllOneDigit(int value)
    {
        int digit = value % 10;
        value = value / 10;
        while (value > 0)
        {
            if (value % 10 != digit)
            {
                return false;
            }
            value = value / 10;
        }
        return true;
    }
    

    (可能有一种更优雅的方式来编写循环,但我还没有喝咖啡……模11或111或1111等方法也非常简洁。)

  4. # 4 楼答案

    这个程序也会给出答案

    import java.util.*;  
    
    public class Generate {  
    
          public static void main(String[] args){  
    
       Scanner scan = new Scanner(System.in);  
       System.out.println("\nEnter the limit:");  
       int k = scan.nextInt();  
       int i,j,w,l,q,d;  
       for(i=13;i<=k;i++)
       {  
    
       j=i%10;  
       if(j!=0)  
       {  
           if(i<99)  
            {  
              for(w=1;w<=9;w++)  
                   {  
                       l=11*w;  
    
                       if(l==i)  
                          {  
    
                          i++;  
                          continue ;  
                           }  
                    }  
              }  
        if(i>99)  
             {  
                for(q=1;q<=9;q++)  
                  {  
                     d=111*q;  
    
                      if(d==i)  
                          {  
    
                          i++;  
                          continue ;  
                          }  
                  }  
             }  
          System.out.println(i);  
    
        }  
       }  
    
    }  
    }  
    

    我知道这个项目相当大,只是为了给大家一个想法,我给出了这个。但我相信它会给出正确的答案