C语言实战开发4——随机数的生成

题目:随机产生四个1到4的整数且不能重复,并把数字保存到数组中

问题分析:根据题目我们可知,我们要随机的生成1到4这四个数字,且还不能重复。所以,我们在生成第一个数字的时候可以直接将这个数字保存到数组中,生成第二个数字之后,我们要那这个数字与第一个数字作比较,如果不同,则继续生成,如果重复了,就重新生成,直到与前面生成的数字不同为止。第三的随机数则要与前两个作比较,第四个随机数则要与前三个作比较。


因为要将数字保存到数组中,所以我们要定义一个数组。又因为每次都要生成不同的随机数,所以我们就要以时间作为生成随机数的种子。

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

int main(){
    int array[4] = {};//定义的一个空数组
    srand(time(NULL));将时间设为种子
    return 0;
}

因为我们生成的随机数要相互之间做比较,所以这随机数就要一边生成一边比较,所以就需要一个循环语句。又因为题目要求只生成四个不相同的随机数,所以说就有个数上的要求,所以我们在这里就可以使用一个for循环语句。因为第一个随机数字是可以直接存入数组中的,所以就有:

for(int i = 0; i < 4; i++){
        int temp = rand() % 4 + 1;
        if(i == 0){
            array[i] = temp;//第一个数字,直接保存 
        }else{

        }
}

在上一个步骤中,我们在 for 循环中定义了一个整型 i,且 i = 0 时生成第一个数字,且不需要作比较,就可以理解为,第一个数字要做比较的次数为0。生成第二个数字时 i = 1,且第二个数字要与第一个数字作比较,就可以看为,第二个数字要做比较的次数为1。由此,我们就可以推出 i 就是当前数字所需要作比较的次数,所以,我们就可以利用这个整型 i 来协助我们进行比较的这一步骤。

if(i == 0){
            array[i] = temp;//第一个数字,直接保存 
        }else{
            int j = 0;
            for(;j < i; j++){
                if(array[j] == temp){
                    break;
                }
            }
            if(i == j){
                array[i] = temp; 
            }else{
                i--;//因为就算该数无效了,i 在for循环中还是会i++,且这个for循环中只有四次生成随机数的机会,为了防止随机数失效后浪费机会,所以在这里要i--
            }
        }

这一步完成了之后,我们就可以直接将数组中保存的数字一个一个的输出出来就完成了。

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

int main(){
    int array[4] = {};
    srand(time(NULL));
    for(int i = 0; i < 4; i++){
        int temp = rand() % 4 + 1;
        
        if(i == 0){
            array[i] = temp;//第一个数字,直接保存 
        }else{
            int j = 0;
            for(;j < i; j++){
                if(array[j] == temp){
                    break;
                }
            }
            if(i == j){
                array[i] = temp; 
            }else{
                i--;
            }
        } 
    } 
    for(int i = 0; i < 4; i++){
        printf("%d ",array[i]); 
    } 
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容