所以基本上
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/