使用随机数发生器整数随机排列(Random permutation of integers usin

2019-06-25 04:11发布

这是我的家庭作业:

Random r = new Random();
public int get100RandomNumber() {
    return 1+r.nextInt(100);
}

您将得到一个预先定义的命名getrand100函数()(上图),它返回一个整数,它是1-100一个随机数。 你可以调用这个函数多次,只要你想,但要注意,此功能是相当耗费资源。 不能使用任何其他随机生成。 你不能改变的定义getrand100()

输出:打印编号1-20的随机顺序。 (不是20的随机数)

我曾尝试..

public class MyClass {

    static Random r = new Random();
    static HashSet<Integer>;

    public static void main(String args[]) {
        myMethod();
        System.out.println(s);
    }    

    public static void myMethod() {
        boolean b = false;
        s = new HashSet<Integer>();
        int i = getRand100();
        if (i >= 20)
            i = i % 20;
        int j = 0;

        int k, l;
        while (s.size() <= 20) 
        {
            System.out.println("occurence no" + ++j);
            System.out.println("occurence value" + i);
            b = s.add(i);
            while (!b) {
                k = ++i;
                if(k<=20)
                    b = s.add(k);
                if(b==true)
                    break;
                if (!b) {
                    l = --i;
                    if(i>=1&&i<=20)
                        b = s.add(l);
                    if(b==true)
                        break;
                }
            }
        }
        System.out.println(s);
    }

    public static int getRand100()
    {
        return r.nextInt(100) + 1;
    }
}

谢谢你的帮助!

Answer 1:

我相信你是问如何使用一个随机数发生器以随机顺序打印出数字1到20。 这也被称为“随机排列”。 所述费-耶茨洗牌是这样的算法。

然而,为了实现该算法,你首先需要一个随机数生成器,可以挑选一个出来的N个项目的概率相等,其中N范围从2至集洗牌的大小,而你只能有一个,可以选择一个选自100项以相同的概率。 这可以容易地通过模运算和“再轧”的组合来获得。



Answer 2:

假设你被允许使用ArrayList类,我建议填充你想(在这种情况下,1至20)的数字列表,然后随机从列表中挑选号码,并删除它们。 使用getRand100() % theList.size()应为您的事业足够随机的,你只需要调用它的19倍。 当只有一个元素是左,没有必要为“随机”,从列表中选择它了。 ;-)



Answer 3:

我相信,我想出了一个方法来转换1到n之间的任意数字! (假定项目的数量是已知的)来的n个项目的唯一置换。

在本质上,这允许整个甲板的“立即”随机化,而无需使用任何混洗算法。 现在,它运行在O(N ^ 2),并要求使用的BigInteger包(即用Java或Javascript),但是我正在寻找方法来优化运行时(虽然,说实话2500迭代是什么,这些天反正)。 无论如何,给出有效的,随机数据中的至少226位的情况下,功能是能够产生下10毫秒的52点的整数的混洗阵列。

该方法类似于用于十进制数转换为二进制(不断除以2等)。 我很高兴应要求提供我的代码; 我觉得很有意思,我以前没有遇到过。



文章来源: Random permutation of integers using a random number generator