c语言随机产生 3 万个数,为什么我的C代码仅每三个随机数生成一次...

我正在尝试模拟蠕虫在由100,000台计算机组成的网络中的传播.模拟本身非常简单,除了出于某种原因,我只需要获得第三个随机数,就不需要任何帮助.

只有以1000为模的索引小于10的计算机才能被感染,因此当感染1000台计算机时,应执行该程序.由于某种原因,我的程序只能得到329.当我降低目标数并检查数组的内容时,只有每三台计算机都被更改了,这是一个一致的模式.例如,在阵列的末尾,即使同时更改了(98002、98003等)之间的计算机,也仅更改了计算机98001、98004、98007、99002、99005、99008.该模式一直保持到数组的开头.当我尝试更改所有1000时,程序进入无限循环并停留在329.

编辑:我只是发现,如果我将NETSIZE降低到10,000,而while循环中的目标降低到100,它不会跳过任何内容.这是否意味着问题与舍入错误有关?比我更了解C的人必须知道答案.

谢谢.

#include

#include

#define NETSIZE 100000

double rand01();

void initNetwork();

unsigned char network[NETSIZE];

int scanrate = 3;

int infectedCount;

int scans;

int ind;

int time;

int main(void) {

initNetwork();

time = 0;

infectedCount = 1;

while (infectedCount < 1000) { //changing 1000 to 329 stops the infinite loop

scans = infectedCount * scanrate;

for (int j = 0; j < scans; j++) {

ind = (int) (rand01() * NETSIZE);

if (network[ind] == 0) {

network[ind] = 1;

infectedCount++;

}

}

time++;

}

for (int k = 0; k < NETSIZE; k++) {

if (network[k] == 1) printf("%d at %d

", network[k], k);

}

}

double rand01() {

double temp;

temp = (rand() + 0.1) / (RAND_MAX + 1.0);

return temp;

}

void initNetwork() {

for (int i = 0; i < NETSIZE; i++) {

if (i % 1000 < 10) {

network[i] = 0;

} else {

network[i] = 2;

}

}

network[1000] = 1;

}

在上面的代码中,我希望代码能够运行,直到1000个易受攻击的索引从0更改为1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值