Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一种简单的算法,它接受两个整数并返回一个随机整数_C++_C_Random - Fatal编程技术网

C++ 一种简单的算法,它接受两个整数并返回一个随机整数

C++ 一种简单的算法,它接受两个整数并返回一个随机整数,c++,c,random,C++,C,Random,函数应该是这样的 int generateSortOfRandomInt(int X, int Y){ /* Your program */ return randomINT that is always the same for X and Y } 如果 generateSortOfRandomInt5,15!=第15,5代 例如 int value1 = generateSortOfRandomInt(1, 3); // 546547 int value2 = generateSo

函数应该是这样的

int generateSortOfRandomInt(int X, int Y){

/*
Your program

*/

return randomINT that is always the same for X and Y
}
如果 generateSortOfRandomInt5,15!=第15,5代

例如

int value1 = generateSortOfRandomInt(1, 3);  // 546547
int value2 = generateSortOfRandomInt(3, 1);  // 134566
int value3 = generateSortOfRandomInt(1, 3);  // 546547 THE SAME AS value1
int value4 = generateSortOfRandomInt(2, 3);  // 646621

谢谢

以下是我的想法:

int generateSortOfRandomInt(int X, int Y)
{
    srand(x*x+y);

    return rand();
}

你的问题很模糊。有一百万种不同的方法可以做到这一点

有些想法是: 将数字除以,然后移动小数点以创建一个数字

然而,根据你是如何得到不同的结果,根据作为参数给出的数字的顺序。我将使用这些数字根据参数向左或向右移动位

搜索柏林噪波以查找2D。如果我没记错的话,这将为相同的输入提供相同的输出

return std::hash<int>()(std::hash<int>()(x) + y);

在C++中没有RAND方法吗?使用或RAND非交换操作?或者可以使用哈希函数。这个问题的动机是什么?你想解决什么问题?这似乎是你强加的一套任意规则,想必你有一个很好的理由不想使用标准库附带的随机化函数,所以你需要向我们提供关于你独特情况的更多细节。要进一步扩展Cody所说的内容,请阅读此文。这会有用的。我删除了srand和rand,并提出了returnx*x+y*1103515245+12345%1000,因为我只需要1中的值-1000@user315684当前位置我说这句话并不是为了引起大家对我的答案的注意,而是为了供大家参考。但是你所做的基本上是实现一个哈希函数。@BenjaminLindley你当然完全正确。但是通过这种方式,我可以避免使用std::hash,并将代码移动到OpenCl中,这使得我的模拟速度更快。我从来没有提到过这一点,所以在大多数情况下,你的解决方案要漂亮得多。-1这太可怕了,你会在整个程序和你调用的任何库中干扰rand的其他使用,使用boost::hash,X和Y的散列的xor就可以了,C++11或其他数千种现成的实现中的任何一种。@user315684为什么这是公认的答案?你甚至不这样使用它?添加像这样的链接[链接文本]http://........com: 这样就不会那么随机了。但这是一个解决方案。我认为对于相同的输入值,你必须得到相同的输出,正如你在示例中所说的。柏林噪声产生伪随机数,而不完全是随机数。但是在使用柏林时,您可以控制输出的方式。主要的问题是,它在我不关心的值之间插值,但我本可以随机生成并删除符号。所以这个链接的等式是可行的。返回1.0-x*x*x*15731+789221+1376312589和7fffffff/1073741824.0;散列一个int不只是返回相同的int类型转换给unsigned吗?如此有效地,你在计算x+y。@FredOverflow:如果它真的这样做了,那将是一个非常糟糕的散列算法,所以不,不太可能。你自己试试看,告诉我你的结果。结果是:@BenjaminLindley And。如果要将32位散列为32位,则使用除identity函数以外的任何函数都是毫无意义的。在我看来,std::hash通过简单地返回其输入来做正确的事情。
int generateSortOfRandomInt(int X, int Y)
{
    return (X * 0xcafebabe) ^ (Y * 0xdeadbeef);
}