C语言中100个数中随机选取10个不同的数如何实现?

C语言中100个整数中随机选取10个不同的整数如何实现?
用srand/rand函数.
谢谢
选十个不同的数,一定要是不同的数.logo0755写的挺详细的,可惜还是会产生相同的随机数,估计只能加循环判断了.
最新回答
长青诗

2023-03-07 20:52:01

首先要确定这100个数的范围,比如0-99。

然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。 直到抽取到不重复的10个数为止。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

以下是运行该程序三次分别得到的结果(每行一次),可以看到是实现了所有功能的。

1
2
3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    int a[10]; // 存储结果。
    int i, j;
 
    srand(time(NULL));//通过获取时间值来设定随机数种子,以保证每次运行结果不同。
    for(i = 0; i < 10; )//注意,第三项留空,因为需要判断每次得到的数值是否重复,如重复则不进行i的自加
    {
        a[i] = rand()%100; //得到一个0-99中的随机数。
        for(j = 0; j < i; j ++)
            if(a[j] == a[i])break;//发现重复,结束内循环
 
        if(j == i) i ++;//如果i和j相等,代表内循环是达到条件退出的,即不是通过break,也就是没有重复项。
    }
     
    for(i = 0; i < 10; i++) //输出得到的数值。
        printf("%d,", a[i]);
    printf("\n");
 
    return 0;
}
96,84,85,30,29,97,92,51,38,81,
49,42,13,18,24,1,75,91,60,5,
68,16,23,79,17,59,83,82,34,70,
我污但不色

2024-04-28 03:08:42

  1. 算法:使用srand/rand产生0~99的随机数作为随机选取的数组下标;用一个布尔型数组来判断当前下标是否被使用过;一直到选出10个为止。

  2. 例程:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
全幼儿园最可爱

2021-07-03 07:10:50

首先要确定这100个数的范围,比如0-99。
然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。
直到抽取到不重复的10个数为止。
示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a[10]; // 存储结果。
int i, j;
srand(time(NULL));//通过获取时间值来设定随机数种子,以保证每次运行结果不同。
for(i = 0; i < 10; )//注意,第三项留空,因为需要判断每次得到的数值是否重复,如重复则不进行i的自加
{
a[i] = rand()%100; //得到一个0-99中的随机数。
for(j = 0; j < i; j ++)
if(a[j] == a[i])break;//发现重复,结束内循环
if(j == i) i ++;//如果i和j相等,代表内循环是达到条件退出的,即不是通过break,也就是没有重复项。
}
for(i = 0; i < 10; i++) //输出得到的数值。
printf("%d,", a[i]);
printf("\n");
return 0;
}
以下是运行该程序三次分别得到的结果(每行一次),可以看到是实现了所有功能的。
96,84,85,30,29,97,92,51,38,81,
49,42,13,18,24,1,75,91,60,5,
68,16,23,79,17,59,83,82,34,70,
旧人不归

2022-04-28 01:34:03

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

int main(int argc, char* argv[])
{
int count=100;
srand((unsigned)time(0));
for(int i=0; i<10; ++i)
{
printf("%d\n",(1+(int)(count*(double)rand()/RAND_MAX+1)));
}

return 0;
}
//嗯是有重复了.回去研究了一下.重写了.我测试了一下.有时候还会有重复了.
#include <stdlib.h>
#include <time.h>
#include <stdio.h>

int main(void)
{
int a[100]={0};
time_t t;
srand((unsigned)time(&t));
for(int i=0;i<10;++i)
{
a[i]=rand()%100;
printf("a[%d]=%d\n",i,a[i]);
}

return 0;
}
我不蛇蝎怎能毁你所爱

2022-04-23 21:18:03

int cnt=0;
for(cnt=0;cnt<10;cnt++)
{
i=rand();
printf(i);
}
大概就是这样了,剩下的自己完成吧。

解答完毕。。。
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
int a[100],b[100],i,j;
int main() {
  for(i=0;i<100;i++)a[i]=i;    //生成100个不同的数,这里直接用a[i]=i; 
  srand((unsigned)time(0));     //设置随机种子
  for(i=0;i<10;){
    j=rand()%100;        //随机选取一个0-100内的下标
    if(b[j]==0){        //当这个下标的数未被选中时,输出
        printf("%d ",a[j]);
        b[j]=1;
        i++;
    
  
 return 0; 
}