注册 登录
编程论坛 C++教室

产生随机数

习惯被动 发布于 2012-05-23 06:46, 293 次点击
程序代码:
#include <iostream>
#include <time.h>
using namespace std;
#define max 7
int main()
{
    int i(0),j,k,l(1),a[max];
    srand((unsigned)time(NULL));
    k=rand()%max;
    a[i]=k;
    k=rand()%max;
    while (i!=max)
    {
        for(j=0;j<=i;j++)
        {
        if(k==a[j])
        l=0;
        }
        if(l)
        {
        i++;
        a[i]=k;
        }
        l=1;
        k=rand()%max;
    }
    for(i=0;i<max;i++)
    {
    cout<<a[i]<<" ";
    }
    cout<<endl;
    return 1;
}

产生0-max的整数(重复产生的会被删除),调试表明是for循环出了问题,但我想了很久想不通为什么for循环会是死循环,求解。
4 回复
#2
rjsp2012-05-23 08:35
强,我愣没看懂你代码的逻辑
#3
hellovfp2012-05-23 10:58
while (i != max - 1)

随机数范围是在0 ~ max - 1(6)的范围内,不会等于max,
查找是否有重复的时候,你总会查到这个范围的数,i没有办法++,所以死循环。
#4
习惯被动2012-05-23 23:31
回复 2楼 rjsp
逐个产生随机数,删除已经产生过的随机数。
#5
习惯被动2012-05-23 23:42
回复 3楼 hellovfp
明白了,非常感谢!
1