C语言入门到进阶(demo:猜数字游戏)----Day6 29th/Nov./2019

要实现的目标:

猜数字游戏:
游戏开始 产生四个1到9之间的不重复的,且按从小到大排序随机数
e.g2 3 4 8
玩家随机输入4个数字
如果猜测的数字正确且位置也正确 输出A
如果猜测的数字正确但位置不正确 输出B
请输入猜测数字:e.g 2 5 8 9  1A1B(一个A 一个B)
e.g  1 2 3 4 0A3B(三个B 零个A)
最多的猜测次数:10次


主要技术

数组 产生1~9的随机数 for循环控制不重复 排序 

数组:存储四个类型一样的数字
产生1~9的不同随机数:rand()函数+利用时间不同,播种,每次产生不同的随机数
for循环控制四个随机数均不相同:第一个随机数直接保存,不可能会有重复;从第二个开始,要与他前面的每一个随机数进行比较,若相同,重新产生,若不同,则可以保存
排序:利用冒泡排序(双重for循环,数值大的元素沉底)


代码的实现

产生四个1到9之间每次都不同的的不重复的随机数

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

int main(int argc, const char * argv[]) {
    int org[4] = {};//保存随机数
    int input[4] = {};//保存用户输入
    int aCount = 0;
    int bCount = 0;
    
    //播种子
    srand(time(NULL));
    //产生随机数
    for(int i = 0; i < 4; i++){
        int temp = rand()%9 + 1;
        
        if (i == 0) {
            //第一次 直接保存
            org[i] = temp;
        } else{
            //判断是否重复
            //i正好和当前已有个数对应
            int j = 0;
            for(; j < i; j++){
                if (temp == org[j]) {
                    //重复了
                    break;
                }
            }
            
            //判断for循环怎么出来的额
            if (i == j) {
                //不重复 保存
                org[i] = temp;
            }else{
                //重复了
                i--;
            }
        }
    }

对系统随机产生的4个随机数进行排序

//冒泡排序
    for (int i = 0; i < 4-1; i++){
        for(int j = 0; j < 4 - i-1; j++){
            if (org[j] > org[j+1]) {
                int temp = org[j];
                org[j] = org[j+1];
                org[j+1] = temp;
            }
        }
    }

开始游戏,提示用户输入按大小排序的不重复的4个数字,比较这4个数字的数值与系统随机产生的是否一致(利用for循环进行比较),再比较这4个数字的位置与系统随机产生的是否是一致,若某一个元素位置和数值均正确,则输出1A,若某一个元素只有数值正确,则输出1B

//开始游戏
    while(1){
        //提示输入
        printf("游戏规则:系统随机生成四个按从小到大的顺序输出的不重复的数字,请用户依次输入四个数,若数字位置和数值均正确,输出A;若只有数字正确,输出B。如1 2 3 4\n"); 
        printf("请输入猜测的数字:");
        for (int i = 0; i < 4; i++) {
            scanf("%d", &input[i]);
        }
        
        //开始
        //1 5 8 9
        //1 2 3 5
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                if (org[i] == input[j]) {
                    //数字存在 判断位置
                    if (i == j){
                        aCount++;
                    }else{
                        bCount++;
                    }
                }
            }
        }
//提示用户结果
        printf("%dA%dB\n", aCount, bCount);
        
        //判断是否正确
        if( aCount == 4){
            printf("全对!!!!\n");
            break;
        }else{
            aCount = 0;
            bCount = 0;
        }
    }
运行结果
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容