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
算法:使用srand/rand产生0~99的随机数作为随机选取的数组下标;用一个布尔型数组来判断当前下标是否被使用过;一直到选出10个为止。
例程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
2021-07-03 07:10:50
2022-04-28 01:34:03
2022-04-23 21:18:03
#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; }