#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a[8],i;
srand((unsigned)time(NULL));
int j=0;
while (j<8)
{
a[j] =rand()%36+1;
for(i=0;i<j;i++)
{
if(a[i]==a[j])
a[j]=rand()%36+1;
}
printf("%-3d",a[j]);
j++;
}
}
这是随机生成一个,要实现多个不能一个一个打把
C语言中随机函数需要使用到srand和rand。
srand((unsigned)time(NULL))则使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到的“随机数”都会是一组固定的序列,因此srand生成的随机数是伪随机数。[1]
库函数中系统提供了两个函数用于产生随机数:srand()和rand()。 原型为:
函数一:int rand(void);
返回一个[0,RAND_MAX]间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
例程:
#include<stdio.h>二维数组解决.
比如你要生成100套,每套8数据, 就定义a[100][8];
外循环用行下标, 内循环用列下标就行了, 如:
for (i = 0; i < 100; i++) {如果你要判断, 必须不同, 那你再加相关进去, 不过不能再用j了, 因为j用来循环了.
追问我这二维数组有错能在我的例子上修改么0 0
追答你根本就不是二维数组啊. 这样吧, 我写个给你吧, 这里面用到了洗牌算法, 保证不会有重复的数据, 效率相当高:
二维数组不成功,不能实现,,求指导,,(还一个小问题,你的那个截图方式是怎么做到的?)
回答的时候输入框中, 有个代码语言, 你用c/c++就行了.
三层循环, 乱七八糟, 我都不知道从哪里纠正起了.
这是随机生成一个吧,,不是多个
追答方法是一样的。
#include <stdio.h>二维数组不成功,没有错误但是无法实现,,,(还一个小问题,你的那个截图方式是怎么做到的?)
你用我上传的代码,不要改动,再试试,没有问题。
我回答栏的C/C++上传的程序。
另外,一组数据中,没有重复数字,你的代码会产生相同的数。
你的代码对,,可是我怎么看不太懂啊,,我有点绕,能够给我讲讲么
追答Generator()函数负责产生n个不重复的数字存放在a[]中,a是二维数组,故该函数每次产生一行数字。
为了产生不重复数字,首先要对新得到的数据与已经得到的数据逐个比较,如果有相同的,则废弃这个数,且执行--i,这是为了抵消for循环中++i的作用,如果没有相同的,则保存此数,并进行下一个,直到产生指定数量的数。
当然还差一个排序函数。
flag我没懂啥意思,
if(flag) a[i] = num;这if语句表达式flag不懂啥意思0 0
flag用来标记num是否与已有的数据是重复的,如果是,则flag被赋予0,不是则保持1不变。完成循环for(j)后,判断flag的值,非零时,则添加num到数组中。
本回答被提问者采纳能做个师范么