所以基本上

int num = rand(2); //random number from 0-2
int otherNum, otherOtherNum;
otherNum = implement this
otherOtherNum = implement this

例如,如果num为2,则otherNum和otherOtherNum必须设置为0和1(或1和0)。

您将如何实现?假设您不能使用分支或查找表。是的,我想要一些操纵解决方案。是的,我希望该解决方案比使用模运算符的解决方案更快(因为这是必不可少的除法)。

我认为查找可能是最快的方法,但不确定,但是我不喜欢这种解决方案。

最佳答案

您也可以使用XOR和位掩码进行此操作。

#include <stdio.h>

void
f(unsigned val, unsigned ary[3])
{
    ary[0] = val;
    ary[1] = (ary[0] ^ 1) & 1;
    ary[2] = (ary[0] ^ 2) & 2;
}

int
main()
{
    unsigned ary[3] = {0};

    f(0, ary);
    printf("f(0) = %d %d %d\n", ary[0], ary[1], ary[2]);

    f(1, ary);
    printf("f(1) = %d %d %d\n", ary[0], ary[1], ary[2]);

    f(2, ary);
    printf("f(2) = %d %d %d\n", ary[0], ary[1], ary[2]);

    return 0;
}

这将打印:
f(0) = 0 1 2
f(1) = 1 0 2
f(2) = 2 1 0

关于c++ - 从集合中给定随机数1时获得整数0、1和2的快速方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29869160/

10-11 18:58