C语言 将产生的随机数存入数组,数据不能相同
1.定义一个一维数,数组大小为24。
2.产生0~23的随机数。
3.将产生的随机数存入i数组,要求数组中的每个数据不能相同。
4.补充说明,这个子程序要求每次调用后,这个数组里面就 存放了0~23这些数据,而且这些数据没有重复的。
5.注意,C语言有随机数函数,可以用函数产生随机数。RAND(N)
#include <stdio.h>
#include <time.h>
#define ArrayMaxItem 24
int RandTest()
{
int i = 0;
int ret = 0;
time_t t;
for (i=0; i<10; i++)
{
srand((unsigned) time(&t)*10);
ret = rand();
//ret = rand((unsigned) time(&t));
printf("ret:%d\n", ret);
}
return 0;
}
int RandArray(int *a, int n)
{
int i = 0;
int t = 0;
time_t mytime;
struct tm *timeinfo;
for (i=0; i<n ;i++)
a[i] = 0;
/*only n-1 posions need to by seted*/
for (i=0; i<n-1; i++)
{
while(a[t=rand((unsigned)time(&mytime))%n] != 0);
a[t] = n-i-1;
timeinfo = localtime(&mytime);
printf("time:%s a[%d]:%d\n", asctime(timeinfo), t, a[t]);
}
for (i=0; i<n; i++)
{
printf("a[%d]:%d\n", i, a[i]);
}
return 0;
}
int main()
{
int a[ArrayMaxItem];
RandArray(a, ArrayMaxItem);
//RandTest();
return 0;
}
1.随机数的使用过程:
网上说要先调用srand(unsigned seed)函数设置随机数种子,再调用rand(void)产生随机数,但我用系统时间来作为种子,产生了十次随机数值都是一样的。
之后采用上面代码所用的方法,直接将种子传入rand()函数中,调用十次产生不同的值,但每次调用产生的值是同一组。
2.获得系统时间:
#include <stdio.h>
#include <time.h>
int main()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) );
return 0;
}
time_t // 时间类型(time.h 定义)
struct tm { // 时间结构,time.h 定义如下:
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
}
time ( &rawtime ); // 获取时间,以秒计,从1970年1月一日起算,存于rawtime
localtime ( &rawtime ); //转为当地时间,tm 时间结构
asctime() // 转为标准ASCII时间格式:
//就是直接打印tm,tm_year 从1900年计算,所以要加1900,月tm_mon,从0计算,所以要加1
3.思路:
用随机数产生0~n-1范围内的数组下标,当对应的数不为0,则置为n-i-1,这样,只需要置n-1个,最后一个本来就是0。
产生0~n-1范围内的随机数的方法是对rand()产生出来的随机数对n取余。
4.运行结果:
time:Tue Apr 19 12:28:42 2016
a[7]:23
time:Tue Apr 19 12:28:42 2016
a[22]:22
time:Tue Apr 19 12:28:42 2016
a[9]:21
time:Tue Apr 19 12:28:42 2016
a[19]:20
time:Tue Apr 19 12:28:42 2016
a[17]:19
time:Tue Apr 19 12:28:42 2016
a[10]:18
time:Tue Apr 19 12:28:42 2016
a[12]:17
time:Tue Apr 19 12:28:42 2016
a[13]:16
time:Tue Apr 19 12:28:42 2016
a[2]:15
time:Tue Apr 19 12:28:42 2016
a[11]:14
time:Tue Apr 19 12:28:42 2016
a[18]:13
time:Tue Apr 19 12:28:42 2016
a[4]:12
time:Tue Apr 19 12:28:42 2016
a[16]:11
time:Tue Apr 19 12:28:42 2016
a[8]:10
time:Tue Apr 19 12:28:42 2016
a[15]:9
time:Tue Apr 19 12:28:42 2016
a[21]:8
time:Tue Apr 19 12:28:42 2016
a[14]:7
time:Tue Apr 19 12:28:42 2016
a[6]:6
time:Tue Apr 19 12:28:42 2016
a[5]:5
time:Tue Apr 19 12:28:42 2016
a[1]:4
time:Tue Apr 19 12:28:42 2016
a[23]:3
time:Tue Apr 19 12:28:42 2016
a[20]:2
time:Tue Apr 19 12:28:42 2016
a[3]:1
a[0]:0
a[1]:4
a[2]:15
a[3]:1
a[4]:12
a[5]:5
a[6]:6
a[7]:23
a[8]:10
a[9]:21
a[10]:18
a[11]:14
a[12]:17
a[13]:16
a[14]:7
a[15]:9
a[16]:11
a[17]:19
a[18]:13
a[19]:20
a[20]:2
a[21]:8
a[22]:22
a[23]:3
C语言 将产生的随机数存入数组,数据不能相同的更多相关文章
- js获取100个随机数存入数组
. //js获取100个随机数存入数组 $(function () { var arr = []; ; var str = ""; ) { , ); ) { arr[num] = ...
- c语言输入一行未知个数数字存入数组
一直有个疑问输入一行数字存入数组时若不知道数字的个数怎么办,最容易想到的办法就是接收字符然后转化为数字,但这样太过麻烦. 今天上网查了下,说可以用ungetc()函数将字符送回输入流,在这里总结归纳一 ...
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- php 将查询出的数组数据存入redis
我们从数据库查询出来的数据一般为数组的形式, 而redis是不支持存入数组的, 一种解决办法是将数组转化为json数据,再将json存入redis,之后取出时再将json转化为php数组. 但将取出的 ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C# Hashtable中存入数组、List
哈希表中存入数组示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- java随机数与数组的使用。
java随机数与数组的使用. 一:题目 二 代码: public class Students { int number; // 学号 int State ; // 年级 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- 第二十三节:Java语言基础-详细讲解函数与数组
函数 函数在Java中称为方法,在其他语言中可能称为函数,函数,方法就是定义在类中具有特定功能的程序.函数,在Java中可称为方法. 函数的格式: 修饰符 返回值类型 函数名(参数类型 参数1, 参数 ...
随机推荐
- java的文件流:字节流(FileInputStream、FileOutputStream)和字符流(FileReader、FileWriter)。
java的输入输出建立在4个抽象类的基础上:InputStream.OutputStream.Reader.Writer.InputSream和OutputStream被设计成字节流类,而Reader ...
- CODESOFT 2015中的条形码对象该如何创建
CODESOFT条码设计软件提供了大量适应行业要求的符号,以及创建二维条形码的选项.用户可以通过条形码对话框选择符号.定义其属性以及输入要编码的消息.下面小编带大家具体学习下如何在CODESOFT ...
- 关于static/const的作用
这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区). 2) 在模块内 ...
- 慕课网-安卓工程师初养成-3-2 Java中的算术运算符
来源:http://www.imooc.com/code/1279 算术运算符主要用于进行基本的算术运算,如加法.减法.乘法.除法等. Java 中常用的算术运算符: 其中,++ 和 -- 既可以出现 ...
- rman--增量备份
1.rman增量备份级别 级别0和全库备份相同,级别1备份执行的是差异备份. 2.增量备份 使用rman实现增量备份的级别0备份 RMAN database; 使用rman实现增量备份的级别1备份 d ...
- mysql 连接命令 表管理 ,克隆表,临时表,字符串属性,设定语句间的分隔符
连接和断开连接mysql -h host -u user -p (即,连接的主机.用户名和使用的密码).断开输入QUIT (或\q)随时退出: 表管理克隆表注意:create table ... li ...
- python函数基础以及函数参数简解
python中函数分为函数.内置函数Python所有的内置函数 自定义函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. ...
- max subquence sum(n^2)
#include<cstdio>#include<cstring>const int maxn=100005;int buf[maxn];int main(){ freopen ...
- centos7 搭建docker内运行rabbitmq,然后再镜像ha方案的完全教程,暂时一个宿主机只能运行一个docker的rabbitmq,但是集群 ha都正常
1.安装centos7.x,配置好网络2.因为docker需要比较高版本的内核,比如使用overlayfs作为默认docker文件系统要3.18,所以先升级内核到3.18以上版本,能直接过4是最佳了检 ...
- Yii cookie 的使用方法
设置cookie: //首先新建cookie$cookie = new CHttpCookie('mycookie', 'this is my cookie');//定义cookie的有效期$cook ...