这是一个什么样的程序?
可以输出n个不同的有上限的数字
过程
由unsigned int seed =time (null); 可以得到一个随机数;再用一定的方法让其有上限;产生了随机数怎么保存呢?这是用到了数组,没产生一个需要的随机数就保存一个,若是不需要的(重复的),它就占了一个位置,要把这个位置还回去。
for (int i = 0; i < geshu; i++){
int t=shangxian-1;
int temp = rand() %shangxian ;
if (i == 0){//第一个 直接保存
array[i] = temp;
}else{
//判断前面是否已经存在了
int j = 0;
for(; j <i; j++){
//比较j对应的值和之前所有的temp是否相同
if(array[j] == temp){
//重复了
//printf("重复了:%d\n",temp);
break;
}
}
//判断是怎么出来的
if (j == i){
//将i前面的比较一遍都没发现重复的
//保存temp值
array[i] = temp;
}else{
//重复了
//重新回到当前这一次
i--;
}
}
}
有哪些重点?
- 数组,数组的定义、使用;
- for循环,for语句的使用,for循环与其他语句的嵌套;
- 随机数的使用,使用随机数时,seed相当于一个种子,srand函数根据这个种子seed,设置一个随机起点,而rand函数根据这个随机起点,返回一个随机数【seed ,RAND_MAX】,其中RAND_MAX是0x7ffff,但是是一个伪的随机数(多次编译产生的随机数是一样的,除非给一个变化的种子),种子在一定代码内可以设置相同,产生一样的随机数。
详情
清风lsq
unsigned int seed = time(NULL); //1000
//time(NULL)是系统时间,设置种子为系统时间,随着系统时间变化,种子也在变,
//以后产生的随机数也在变,由于这个随机数
//设置随机数的种子
srand(seed);
for(int i = 0; i < count; i++){
//rand()根据前面的seed返回一个随机数
int temp2 = rand() % 9 + 1;
提示
for(; j <i; j++){
//比较j对应的值和之前所有的temp是否相同
if(array[j] == temp){
//重复了
//printf("重复了:%d\n",temp);
break;
}
这段代码不能直接就判断temp与之前的随机数没有重复,因为它退出来的时候有两种情况!
2.
else{
//重复了
//重新回到当前这一次
i--;
temp与之前的数重复之后,下面的操作就是i++,但是这一轮中并没有在这个数组中存入一个数(会有,因为之气那没有初始化这个数组。。。记得变量要初始化),所以要让下一个符合的数存入这个位置,就需要把下一步i++给减下来,即i- -;
总结
做题先要理清思路,看需要哪些东西。慢慢来,good good study,day day up!