随机数问题求解
目的:对50个数进行不重复随机排序在百度上搜了关于随机数方面的代码,程序还是没法正常打印出所有随机不重复数字
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i;
srand((int)time(0));
for(i=0;i<50;i++)
{
printf("%d\n",rand%36);
}
}
本帖最后由 jackz007 于 2020-3-9 12:38 编辑
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void random(int array[] , const int n)
{
int c , k , m ;
bool f ;
srand(time(0)) ;
for(k = 0 ; k < n ; k ++) array = 0 ;
m = 0 ;
while(m < n) {
c = rand() % n + 1 ;
f = true ;
if (m) {
for(k = 0 ; k < m ; k ++) {
if (array == c) {
f = false ;
break ;
}
}
}
if (f) array = c ;
}
}
main(void)
{
int array , k , n = 50 ;
random(array , n) ;
printf("%2d" , array) ;
for(k = 1 ; k < n ; k ++) printf("\t%2d" , array) ;
printf("\n") ;
}
编译运行实况:
C:\Bin>g++ -o rand rand.c
C:\Bin>rand
32 22 18 14 30 42 46 48 15 27
29 7 11 41 3 33 12 31 26 16
8 40 17 2 25 34 39 9 50 21
47 4 5 43 23 45 49 1 44 13
36 20 24 35 38 6 10 19 37 28
C:\Bin>rand
49 34 37 27 35 47 41 29 38 36
3 32 4 40 24 13 39 8 20 50
18 5 11 1 12 44 7 9 10 30
26 43 33 6 19 16 2 15 31 22
17 23 25 14 48 45 21 42 28 46
C:\Bin>rand
25 36 28 26 48 43 22 29 9 39
3 6 20 23 42 35 15 40 47 19
10 12 1 41 21 8 14 38 33 27
37 7 30 18 44 16 17 13 5 49
11 2 4 31 50 46 24 45 34 32
C:\Bin> 1、你的程序都没有对产生的随机数进行过滤当然会有重复的
2、你要打印50个随机数 而你定义的随机数范围就只有0-36 所以不管怎么取都会有重复的
先制定一个数组 保存产生的随机数 在每个随机数生成的时候就遍历这个数组 看有没有出现过 如果有 就重新生成随机数 如果没有再打印出来
页:
[1]