殇 愈 冷 2022-03-18 17:09 采纳率: 100%
浏览 9
已结题

怎么用简洁的代码求A和B的值

题目

img

我开始是想在 judgment_Number 函数里想用 if 语句来求 A 和 B 的值,但是后来发现按照我的思路来写要用到大量的if语句,而且可能会遗漏某种结果,我就迷茫了
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>

#define N           4

void generate_Random_Number(int*);
void get_Number(int*);
bool judge_Equality(int*);
void judgment_Number(int*, int*, int);

int main(void)
{
    int x[N], y[N];     //数组x用来存放生成的随机数的四位数字,数组y用来存放用户输入的四位数字
    generate_Random_Number(x);         //生成随机数
    get_Number(y);                     //处理用户输入
    if (x[0] == y[0] && x[1] == y[1] && x[2] == y[2] && x[3] == y[3])       //判断用户输入数和随机数是否相等
    {
        printf("4A0B\n您猜对了!\n");
        return 0;
    }
    else
    {
        judgment_Number(x, y, N);  //怎么写?
    }
}

void generate_Random_Number(int* p)
{
    srand((unsigned)time(NULL));
    while (1)
    {
        p[0] = rand() % 9 + 1;
        p[1] = rand() % 10;
        p[2] = rand() % 10;
        p[3] = rand() % 10;
        if (judge_Equality(p))
        {
            printf("四位不重复的随机数已生成!\n");
            break;
        }
    }
}

bool judge_Equality(int* a)     //判断四位数是否有重复
{
    if (a[0] != a[1] && a[0] != a[2] && a[0] != a[3] && a[1] != a[2]
        && a[1] != a[3] && a[2] != a[3])
    {
        return true;
    }
    return false;
}

void get_Number(int* p)      //处理用户输入
{
    int a;
    printf("请输入你猜想的那个四位不重复的随机数:\n");
    while (scanf("%d", &a) != EOF)
    {
        if (a >= 1000 && a <= 9999)         //判断用户输入的是否为4位数
        {
            p[0] = a / 1000;
            p[1] = a / 100 % 10;
            p[2] = a / 10 % 10;
            p[3] = a % 10;
            if (judge_Equality(p))//判断用户输入的这个4位数是否有重复
            {
                break;
            }
        }
        printf("输入错误\n请重新输入:\n");
    }
    return;
}

void judgment_Number(int* p, int* q, int n)
{
  //这个函数该怎么写
}
求个思路
  • 写回答

1条回答 默认 最新

  • 於黾 2022-03-18 17:20
    关注

    怎么会有大量的if语句呢
    无非就是先看有几个A,再看剩下的数字是不是属于B,就完事了呀
    直接循环一下数组
    如果位置对数字也对,A++
    否则如果数字对,B++
    -=-=-=
    是否有重复也应该用循环来做,你这样一位一位的都写死,那不累死自己
    这还好是4位,要400位你代码要超过10万行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀