趣味C语言之猜数游戏

2019-08-02  本文已影响0人  凌云struggle
  1. 产生4个不相同的随机数
  2. 将4个数从小到大进行排序(插入排序)
  3. 游戏开始,将输入的数字与原始数字进行比较,通过两重循环实现,在数字相同的情况下,如果i与j相等,则A++;否则B++
  4. 如果A等于4,则跳出循环,游戏结束;否则继续输入,同时A,B的值还原
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>



int main(int argc, const char * argv[]) {
    //保存原始数据
    int originalArray[4] = {};
    //保存猜测数据
    int guessArray[4] = {};
    //计算数字正确且位置正确的个数
    int countA = 0;
    //计算数字正确但位置错误的个数
    int countB = 0;
    
    
    srand((unsigned int)time(NULL));
    for(int i = 0;i < 4;i++){
        
        bool isExist = false;
        int temp = 0;
        while(1){
            //产生一个随机数
            temp = rand() % 10;
            
            //判断是否已经存在
            for(int j = 0;j <i;j++){
                if(originalArray[j] == temp){
                    //重复了,停止比较,继续产生新的
                    isExist = true;
                    break;
                }
            }
            //1.重复了,break
            //2.遍历数组没有重复的
            if(isExist == false){
                break;
            }
        }
        
        //边产生 边排序   插入排序
        //寻找这个数对应的位置
        int j = 0;
        for(;j <i;j++){
            //j对应的数字和产生的数字进行比较
            if(temp < originalArray[j]){
                //j后面的内容往后移动 腾出空间
                for(int k = i;k > j;k--){
                    originalArray[k] = originalArray[k-1];
                }
                break;
            }
            
        }
        
        //写入到数组中
        originalArray[j] = temp;
        
    }
    
    //开始游戏
    while (1) {
        //输入猜测的数据
        printf("请输入猜测的数字:\n");
        for (int i = 0; i < 4; i++) {
            scanf("%d",&guessArray[i]);
        }
        
        //将产生的数与输入的数进行比较
        for (int i = 0; i < 4; i++) {  //控制原始数字
            for (int j = 0; j < 4; j++) {   //控制输入
                if (originalArray[i] == guessArray[j]) {
                    if (i == j) {
                        //数字相同且位置相同
                        countA++;
                    }else{
                        //数字相同但位置不同
                        countB++;
                    }
                }
            }
        }
        if (countA == 4) {
            //猜对了!
            printf("Congratulations!!!\n");
            break;
        }else{
            printf("%dA%dB\n",countA,countB);
            
            //清零
            countA = 0;
            countB = 0;
            
        }
        
    }
    
    
//    //输出产生的数
//    for(int i =0;i <4;i++){
//        printf("%d",originalArray[i]);
//    }
//    printf("\n");
    
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读