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

时间:2013-12-28 06:40:50

标签: c arrays random

我编写了一个代码,用于使用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;
}

请帮助,因为我无法理解为什么它正在运行某些通话而不是其他通话。

1 个答案:

答案 0 :(得分:1)

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

看起来很好:

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]小于最小值,则会出现问题。