Demo3-高级版猜数字

要求

  1. 随机生成四个由小到大且不重复的数字
  2. 用户直接猜
  3. 根据猜测的数字输出猜测的结果
    (A表示位置和数值都正确的数字,B表示位置不正确但数值正确的数字)
  4. 直到猜测正确才退出程序

创作思路与过程

  1. 第一步
    确认需要用到的数据类型,然后由生成随机数易知需使用srand
    for循环和数组来保存数字如下
int main() {
    int org[4] = {};//保存随机数
    int input[4] = {};//保存用户输入
    srand(time(NULL)); //播种子,产生随机数

  1. 第二步
    数列中的数字各不相同,则需要各自进行比较,与之前的猜数字同理
    for(int i = 0; i < 4; i++){
        int temp = rand()%9 + 1;
        if (i == 0) {            
            org[i] = temp;//保存第一次的值用于比较
        } else{
            //开始判断是否重复
            int j = 0;
            for(; j < i; j++){
                if (temp == org[j]) {                  
                    break;//重复了就重来一次
                }
            }        
            if (i == j) {               
                org[i] = temp;//不重复则可以保存这个值
            }else{                
                i--;//重复的情况
            }
        }
    }
  1. 猜的数字按从小到大的顺序排列
    运用所学的排序方法,如:冒泡 选择 插入(此处使用冒泡排序)
    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;
            }
        }
    }

可以在此时进行实时检验,若输出的数列不重复且从小到大即编码正确

for(int i = 0; i < 4; i++){
 printf("%d ", org[i]);
  }
  1. 第四步
    提示并接收玩家输入的猜测数字
        printf("请输入猜测的数字:");
        for (int i = 0; i < 4; i++) {
            scanf("%d", &input[i]);
        }
  1. 第五步
    进行判断输入数字是否正确,并进行判断输入的数字属于哪种类型
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                if (org[i] == input[j]) {
                    //当数字正确时,仅需判断位置是否正确
                    if (i == j){
                        aCount++;//记录A的个数
                    }else{
                        bCount++;//记录B的个数
                    }
                }
            }
        }
  1. 第六步
    告诉玩家输入的结果
       printf("%dA%dB\n", aCount, bCount);
       
       if( aCount == 4){
           printf("全对!!!!\n");
           break;
       }else{
           aCount = 0;
           bCount = 0;
       }
   }

7.第七步
得知直到猜测正确才退出程序,所以要在开始游戏时加上一个死循环,则最终写入结果为

    while(1){
        printf("请输入猜测的数字:");
        for (int i = 0; i < 4; i++) {
            scanf("%d", &input[i]);
        }
        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;
        }
    }
    return 0;

检验

菜鸡的猜数字全过程.

满足要求

课后反思

自己写的时候说花时间太长而且代码过于繁琐,应当更加优化,上面的代码靠齐。

你可能感兴趣的:(Demo3-高级版猜数字)