相关疑难解决方法(0)

从C中的列表中选择随机节点

我有一个列表,我想从中随机选择一个节点.由于它不是一个阵列,我事先并不知道它的长度.有没有办法随机选择一个节点(均匀分布)而不必扫描整个列表(在最坏的情况下)两次(即获得其长度并在随机选择其位置后到达所选节点)?

这是我用于列表的代码:

struct mynode {
    in_addr_t paddr;
    struct mynode *prev, *next;
};

struct mylist {
    struct mynode *first, *last;
    char *name;
};
Run Code Online (Sandbox Code Playgroud)

c random list

8
推荐指数
1
解决办法
173
查看次数

C++中最随机的函数是什么?

我用过

#include<stdlib>
#include<time>
using namespace std;
srand((unsigned)time(0));
int n=(rand()>>8)%4;
Run Code Online (Sandbox Code Playgroud)

还有什么其他随机函数,或者其他函数可以用作随机数生成器?

编辑:我没有特别的理由提出这个问题,我只是想知道C++是否有任何其他随机函数.

c++ random

5
推荐指数
4
解决办法
4362
查看次数

c中随机数生成的安全性

它希望在密码学等安全应用中使用随机数生成器。

我知道它srand(time(NULL))可以用来在运行时生成随机数。

C 标准库中是否有更安全的安全随机数生成器实现?

c security cryptography

5
推荐指数
0
解决办法
4509
查看次数

如何制作一个在2或3之间选择的随机数发生器.(不是1,2,3)

嗨,我正在研究一个monty hall发生器,在我的代码的一部分,我需要它生成随机数2或3.它不能是1,2,3但计算机需要在2或3之间选择.谢谢!

我试过 randomCarDoor = ( rand() % 3 ) + 1;但不行.

randomCarDoor = ( rand() % 3 ) + 1;

它给了我数字,1,2,3但我只想要23

c random

5
推荐指数
1
解决办法
83
查看次数

我需要在C中生成随机数

可能重复:
如何在C中生成随机数?
rand()的实现
在Blender3D中生成随机地形

我需要C中的高质量随机数,但我不知道该怎么做.我需要能够从1-100获得数字.任何帮助或可能指向我可以找到帮助的地方.

c random

4
推荐指数
3
解决办法
7万
查看次数

RDRAND和RDSEED内在函数GCC和英特尔C++

英特尔C++编译器和/或GCC是否支持以下内在函数,例如自2012/2013年以来MSVC的内在函数?

int _rdrand16_step(uint16_t*);
int _rdrand32_step(uint32_t*);
int _rdrand64_step(uint64_t*);
int _rdseed16_step(uint16_t*);
int _rdseed32_step(uint32_t*);
int _rdseed64_step(uint64_t*);
Run Code Online (Sandbox Code Playgroud)

如果支持这些内在函数,那么它们支持哪个版本(请使用编译时常量)?

c++ gcc icc intrinsics rdrand

3
推荐指数
2
解决办法
2653
查看次数

18万亿投掷硬币,我哪里出错了?

为什么以下C代码在我的桌面和服务器上给出了不同的结果,两者都运行类似的Linux版本?

它在18万亿投币中找到了行序列中最长的同一侧.[见Iain M. Banks的科幻小说考虑Phlebas.]

在服务器上,经过15.7万亿投币(它仍然在运行)之后,到目前为止,行序列中最长的同一侧只有29个.因为2^44 = 17,592,186,044,416,我希望最长的同一侧序列在40到40年代的中间位置,在完成所有18万亿之后,可能还有44个.

在仅仅47亿次投掷硬币之后的桌面上,最长的序列已经是31,从那以后2^31 = 2,147,483,648,这听起来是正确的.

那么为什么我在15.7万亿投币后只在服务器上获得了29个序列,但在我的桌面上只有47亿的31个序列?

Modulo偏见是我的第一个想法.RAND_MAX在桌面和服务器上是相同的,2,147,483,647(32位签名长).所以rand()函数会给我一个数字0 <= rand() <= 2,147,483,647.0是偶数,2,147,483,647是奇数,所以除非我非常误以为我int rand_num = (rand() % 2);的代码行没有引入模偏差.

我知道C标准库的伪随机数生成器不适合加密.当然,这不可能是一个因素,当然产生非常长,零和一系列的序列.可以吗?

这是来源:

在两台机器上编译使用: gcc -O3 -o 18TCT 18TrillionCoinTosses.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[])
{
    srand(time(NULL));

    int current_seq = 0;
    int longest_seq = 0;
    int prev_rand_num = -1;

    long long i = 0;
    long long total = 18000000000000;

    // To …
Run Code Online (Sandbox Code Playgroud)

c random

3
推荐指数
1
解决办法
269
查看次数

在不连续范围内生成随机数的最佳方法是什么?

有没有比以下更好的方式:

#define BOUND 7

int r;
int e = 1;

r = rand() % BOUND;

while (r == e){

    r = rand() % BOUND;
}
Run Code Online (Sandbox Code Playgroud)

用于生成除值之外的范围内的数字e

c algorithm

3
推荐指数
2
解决办法
185
查看次数

生成真随机数

我想模拟随机提供52张标准卡而不使用rand/srand urandom等...

这是我的随机数函数

int rand2(int lim)
{
  static int a = 34;  // could be made the seed value                                                            
  a = (a * 32719 + 3) % 32749;
  return ((a % lim) + 1);
}
Run Code Online (Sandbox Code Playgroud)

结构我将知道卡是否已经弹出(0 =否,1是)

typedef struct          s_game
{
  int                   *cards;
  int                   state;
  unsigned int          dat_rand;
}                       t_game;

int             main()
{
  t_game        game;
  int           i;
  int           rd;

  i = 0;
  game.cards = malloc(sizeof(*game.cards) * 52);
  while(i < 52)
    {
      rd = rand2(52);
      if(game.cards[rd] == 0)
        {
          game.cards[rd] = …
Run Code Online (Sandbox Code Playgroud)

c random

1
推荐指数
1
解决办法
1094
查看次数

C中的随机数生成器游戏

我最近已经开始使用C,并且无法让计算机想到一个随机数.到目前为止这是代码.我需要帮助!

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    time_t t;
    int userin;
    printf("Guess a number from 1 to 10\n");
    scanf("%d", userin);
    int r = rand() % 11;

    if (r == userin)
    {
        printf ("you are right");
    }
    else
    {
        printf("Try again");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

很多人解决了!!!!

c

0
推荐指数
1
解决办法
355
查看次数

如何在 C 中使用 random()

所以我目前正在学习 C,我对该random()函数的工作方式有些困惑。我知道我必须提供一个种子,但我不知道如何实际生成随机数。

srandom(seed);
long int value= random(40);
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,它给了我一个编译器错误:

too many arguments to function ‘long int random()
Run Code Online (Sandbox Code Playgroud)

最终目标是获得 1 到 40 之间的随机数。我应该补充一点,目标是不使用该rand()函数。

c random

0
推荐指数
1
解决办法
3万
查看次数

标签 统计

c ×9

random ×7

c++ ×2

algorithm ×1

cryptography ×1

gcc ×1

icc ×1

intrinsics ×1

list ×1

rdrand ×1

security ×1