回 帖 发 新 帖 刷新版面

主题:怎样生成1到6随机数?

请大家指点:怎样生成有上界和有下界的随机数,怎样设置上界和下界.
求帮助,大恩不言谢.

回复列表 (共7个回复)

沙发

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

int myrand( int lv, int hv ) // 产生[lv,hv]区间内的随机数
{
    return (int)( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );
}

int main()
{
    srand( 0 );
    for( int i=0; i<100; ++i )
    {
        printf( "%d ", myrand(1,6) );
    }

    return 0;
}

板凳


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

using namespace std;

int main()
{
    srand(time(NULL));
    int array[10];        //[]里的数代表一次产生随机数的个数
    for(int j=0;j<10;j++)
    {
        for(int i=0; i<10;i++)
        {
            array[i]=rand()%6+1;        //产生[1,6]随机数
            cout<<array[i]<<" ";
        }
        cout<<endl;
        cin.get();
    }
}



要是想用C的话,把cout改成printf,加个conio的头文件就好了,

3 楼

怎样生成50到100之间的随机数呢

4 楼

我还是不知道怎样设置下界。生成的随机数只能从1开始。求指点

5 楼

[quote]怎样生成50到100之间的随机数呢[/quote]
变通一下,产生0-50的随机数,然后加50

6 楼


#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main()
{
    int i,a[100]={0};
    srand(time(0));
    for(i=0;i<100;i++)
    {
        a[i]=rand()%50+50;
        printf("%4d",a[i]);
    }
}


#hinclude "stdlib.h"
#include "time."
这两行一定要加入

若srand(time(0));不加,楼主运行一下就会发现,每次结果都一样

7 楼

#include <stdio.h>
#include <stdlib.h>
#define MAX 10

int myrand( int lv, int hv ) // 产生[lv,hv]区间内的随机数
{
    return (int)( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );
}

int main()
{
    int m, n;
    srand( 0 );//我个人认为写完整得好,srand((unsigned)time(NULL));
    printf("请输入随机数的上界:");
    scanf("%d", &m);
    printf("请输入随机数的下界:");
    scanf("%d", &n);
    if(m <= n && n >= 0)
    {
        for( int i=0; i<MAX; ++i)
        {
            printf( "%d ", myrand(m,n) );
        }
    }
    else
    {
        printf("随机数的上下界输入有误!\n");
    }
    printf("\n");
    return 0;
}
不好意思,没经一楼的同意,就拿一楼的程序来解释,这里说声抱歉。
一楼的程序写得能动性很强。
我修改下,来解释。
(int)( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );
我们一步步来,拿数值来说明好理解一点
如传进来的数值是,lv = 1, hv = 6
(hv - lv + 1)= 6
rand()范围:0~RAND_MAX
转为double型
(double)(hv-lv+1) = 6.0
rand()*(double)(hv-lv+1); 属于 [0.0, 6*RAND_MAX]
rand()*(double)(hv-lv+1)/(RAND_MAX+1) );属于[0.0,6)
( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );属于[1.0, 7)
转为int型
(int)( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );//,舍弃小数点后面的值,属于[1, 6]
不知道我这么写楼主明白不




我来回复

您尚未登录,请登录后再回复。点此登录或注册