gpt4 book ai didi

c - 使用 rand 选择数组中的特定数字

转载 作者:行者123 更新时间:2023-11-30 15:40:50 25 4
gpt4 key购买 nike

我已经编写了使用rand()在数组中选择数字的代码。 rand_range 函数在数组中的最小数与数组元素总和之间选择一个随机数。数组数组元素从第一个元素开始添加,如果总和超过生成的随机数,则选择一个元素。重复此操作,直到达到所需的选择数量。
该程序在另一个循环内调用,因此会运行多次。但问题是它在初始调用中运行成功,但在以后的调用中它会进入无限循环并且不会中断。

loop: while (1)                                     
{
random=rand_range(minimum,total);
chk=0;
for(i=0;i<npop;i++)
{
chk+=obj[i];
if(chk>=random)
{
selectedix=i;
break;
}
}

for(i=0;i<countselected;i++)
{
if(selectedix==previx[i])
goto loop;
}

previx[countselected]=selectedix;
selectedarr[selectedix]=obj[selectedix]; //selected array
countselected+=1;

if (countselected==npop)
break;
}

请帮助,因为我无法理解为什么它针对某些调用而不针对其他调用运行。

最佳答案

正确阅读您的代码后,我明白了它的意思。您本质上是根据 obj 中的分布/直方图对数字列表进行概率排序。

这看起来不错:

loop: while (1)                                       
{
random=rand_range(minimum,total);
chk=0;

for(i=0;i<npop;i++)
{
chk+=obj[i];
if(chk>=random)
{
selectedix=i;
break;
}
}

for(i=0; i<countselected; i++)
if(selectedix==previx[i])
goto loop;

previx[countselected]=selectedix;
selectedarr[selectedix]=obj[selectedix];
countselected++;

//if countselected was not initialised to zero
//an infinite loop could occur here
printf("%d", &countselected);
if (countselected==(npop-1))
break;
}
}

直到某个 obj[i] == 0 - chk 永远不会停止!或者,较小的值将导致较长的循环。另外,如果 obj[0] 小于最小值,也会出现问题。

关于c - 使用 rand 选择数组中的特定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com