| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4639 人关注过本帖
标题:随机数组
只看楼主 加入收藏
alive1988
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-11-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
随机数组
怎么用C语言生成一个随机数组。比如1到16的数组。
搜索更多相关主题的帖子: 随机 
2009-11-10 22:00
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
srand((unsigned)time(NULL));
rand_array[0] = rand()%16+1;
头文件 time.h
2009-11-10 22:06
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
收藏
得分:0 
楼上正解

-︻┻┳═一 ☆ 悲伤的代价就是让自己明白什么是最重要的和应该珍惜的
2009-11-11 10:17
alive1988
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-11-10
收藏
得分:0 
回复 2楼 lijm1989
谢谢指点。
2009-11-11 13:31
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:10 
给2楼完善一下:
#include "stdio.h"
#include "time.h"
int main(void)
{
    int i,a[16];
    printf("output the integers(1-16):\n");
    srand((unsigned)time(NULL));
    for(i=0;i<16;i++)
    {
        a[i]=1+rand()%16;
        printf("%4d",a[i]);
    }
    putchar('\n');
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
2009-11-11 13:59
alive1988
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-11-10
收藏
得分:0 
回复 5楼 hnliji1107
谢谢。我还不怎么看得懂。慢慢看。。。如果要求16个数各不一样呢?
2009-11-12 22:21
xiepanqi
Rank: 2
等 级:论坛游民
帖 子:43
专家分:55
注 册:2009-10-24
收藏
得分:0 
5楼的兄弟可以具体解释下这两句吗?
srand((unsigned)time(NULL));
a[i]=1+rand()%16;
2009-11-12 23:43
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
收藏
得分:10 
srand((unsigned)time(NULL));

time_t time(time_t *timer)返回time_t类型时间 以秒为单位(从1970.1.1午夜算起)
time(0)返回当前时间
void srand(   unsigned int seed );
 随机函数种子 如果不设置默认srand(1)

 以当前时间作为种子 随机函数求出的值才是变化的

int rand( void );返回 0 到 RAND_MAX (32767)的值


rand/16 一个数除以16得0到15的数
        +1 得到1到16的数




[ 本帖最后由 ml232528 于 2009-11-13 09:55 编辑 ]

-︻┻┳═一 ☆ 悲伤的代价就是让自己明白什么是最重要的和应该珍惜的
2009-11-13 09:46
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
收藏
得分:0 
The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970, Coordinated Universal Time (UTC), according to the system clock. The return value is stored in the location given by timer. This parameter may be NULL, in which case the return value is not stored.

In Visual C++ 2005, time is a wrapper for _time64 and time_t is, by default, equivalent to __time64_t. If you need to force the compiler to interpret time_t as the old 32-bit time_t, you can define _USE_32BIT_TIME_T. This is not recommended because your application may fail after January 18, 2038; the use of this macro is not allowed on 64-bit platforms.

-︻┻┳═一 ☆ 悲伤的代价就是让自己明白什么是最重要的和应该珍惜的
2009-11-13 09:51
蓝色药剂
Rank: 4
等 级:业余侠客
帖 子:43
专家分:204
注 册:2007-11-24
收藏
得分:0 
以下是引用alive1988在2009-11-12 22:21:17的发言:

谢谢。我还不怎么看得懂。慢慢看。。。如果要求16个数各不一样呢?
如果要求16个数各不相同,可以做一个标志数组,每次生成一个随机数,就记录在数组中,然后下次生成的随机数到标志数组中查找,查到了说明已经生成了,就要在随机抽一个数,不过这样算法效率不高,不过好理解。

还有一种思路是你做一个数组将1-16存放在数组中,然后循环16次,每次生成一个随机数作为这个数组的下标,然后交换当前下标和随机数生成的下标指示的数组中的数,就行了。

int array[16] = {1,2,3...16};
int i=0, j=0;
int temp;
for(i=0; i<16; i++)
{
    j = rand()%16;
    if(j!=i)
    {
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}

2009-11-13 10:25
快速回复:随机数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020532 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved