这里介绍一个将0到9十个数随机摆入数组的算法,整个算法的思路还是比较简单的,相当于这里有10个盒子,要把标有0到9的10个球放入盒子里,当然你每次拿到的球的标号是随机的,如果你拿到的球的数字之前的盒子里已经有了,那就要重新再拿一个球看看,直到没有重复的,再放入盒子,以此类推。
先大体感觉一下这个算法至少应该有两层循环,外层循环的是盒子的编号,放好一个盒子再放下一个盒子;内层循环是用来遍历所有盒子里的球的数字是否和你手上的重复,如果出现重复就重新拿一个球,直到所有盒子里的球都不重复,才能将手里的球放入。
然后我们分析一下具体代码应该怎么写,这里以c为例,首先我们定义一个数组a[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},当然你用什么数字都可以,然后c里面产生随机数的方法是srand((int)time(0)); 和 x=rand()%10; ,srand()需要包含time.h文件。外层循环用 i 参考,用for来写应该是 for( i=0; i<10 ; i++) ,关于变量的定义我们在前面统一写就可以了,然后就进入内层循环,内层循环是用来遍历数组看看有元素值和产生的随机数相同的,那么以 j 为参考应该这样写 for( j=0 ; j<10 ; j++) ,进入循环以后,我们先要做的是判断当前的 a[ j ]是否和产生的随机数 x 相同,如果相同的话我们就不用比较后面的元素了,我们可以用break; 跳出这个for循环,跳出来之后呢我们不能直接回到下一次外层循环,因为for循环会执行 i++ ,但是你当前的 a[ i ]并没有处理好,要继续处理,我们在回到外层循环之前要加一句 i-- 来与之抵消。如果一直都有重复那么就一直重复这个动作,直到数组里所有元素都与这个随机数 x 不同,那么这个 x 就可以放入 a[ i ]中并处理下一个了,但是我们应该怎么标志什么时候是全部不重复呢?我们可以先定义一个变量 t 为1,在内层循环里如果有重复的,在break之前把这个 t 变量置为 0即可,这样我们在内层循环之后可以写一个 if 语句,当i=1时,才让 x 赋给 a[ i ] ,如果 i !=0 说明有重复是break跳出来的,那么就不赋值,继续处理当前这个 i。
到这里写这个算法就非常简单了,下面给出具体代码。
<pre name="code" class="cpp">#include <iostream>
#include <time.h>
void main(void){
int a[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
int i,j,x,t;
for(i=0;i<10;i++){
srand((int)time(0));
x=rand()%10;
t=1;
for(j=0;j<10;j++){
if(a[j]==x){i--;t=2;break;}
}
if(t==1)
a[i]=x;
}
for( i=0;i<10;i++) std::cout<<a[i]<<"\n";
system("pause");
}
本文介绍了如何使用算法将0到9这10个数字随机且无重复地填充到数组中。算法思路是通过外层循环遍历盒子编号,内层循环检查数字是否存在重复,若重复则重新生成随机数。文章详细解析了C语言实现该算法的过程,包括随机数生成、循环逻辑以及处理重复数字的方法。

6万+

被折叠的 条评论
为什么被折叠?



