求🐎,急。用c或c++都可

img

img

img

完全不理解意思


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

// 等式字节数
#define EQ_MAX 100
// 每个数字的最大位数
#define NUM_LEN_MAX 10

// 等式 a+b=c 或者 a-b=c
char equation[EQ_MAX];
int a, b, c;
 // 操作符, + = 1, - = -1
int op;
char op_c;

// ABC的位数
int len_a, len_b, len_c;

// 搜索的起始和结束数字
int start_a, start_b, start_c;
int end_a, end_b, end_c;

int mypow(x, y)
{
    int i;
    int v = 1;
    for (i = 0; i < y; ++i) {
        v *= x;
    }
    return v;
}

void init_x(char *p0, char **pp1, int *x, int *len_x, int *start_x, int *end_x)
{
    *x = strtol(p0, pp1, 10);
    *len_x = *pp1-p0;
    *start_x = mypow(10, *len_x - 1);
    *end_x = mypow(10, *len_x) - 1;
}

int strdiff(char *x, char *y, int len)
{
    int count = 0;
    int i;

    for (i = 0; i < len; ++i) {
        if (x[i] != y[i]) {
            count++;
        }
    }
    return count;
}

// 初始化计算变量
int init(void)
{
    char *p0, *p1;
    p0 = &equation[0];
    int i;

    // a
    init_x(p0, &p1, &a, &len_a, &start_a, &end_a);

    // op
    op_c = *p1;
    if ('+' == *p1) {
        op = 1;
    } else if ('-' == *p1) {
        op = -1;
    } else {
        exit(0);
    }

    // b
    p0 = p1+1;
    init_x(p0, &p1, &b, &len_b, &start_b, &end_b);

    // c
    p0 = p1+1;
    init_x(p0, &p1, &c, &len_c, &start_c, &end_c);
}

void cal()
{
    int loop_a, loop_b, loop_c;
    int diff_num;
    int result_count = 0;
    int min_a = 0, min_b = 0, min_c = 0;
    char new_eq[EQ_MAX];
    int eq_len = strlen(equation);

    // 比较简单的计算, 直接用三重循环实现
    for (loop_a = start_a; loop_a <= end_a; ++loop_a) {
        for (loop_b = start_b; loop_b <= end_b; ++loop_b) {
            for (loop_c = start_c; loop_c <= end_c; ++loop_c) {
                // 检验算式是非成立
                if (loop_a + op * loop_b != loop_c) {
                    continue;
                }
                // 算式成立, 判断差异
                snprintf(&new_eq[0], EQ_MAX, "%d%c%d=%d", loop_a, op_c, loop_b, loop_c);
                diff_num = strdiff(&equation[0], &new_eq[0], eq_len);
                if (diff_num <= 3) {
                    result_count ++;
                    if (0 == min_a) {
                        min_a = loop_a;
                        min_b = loop_b;
                        min_c = loop_c;
                    }
                }
            }
        }
    }

    printf("%d\n", result_count);
    printf("%d%c%d=%d\n", min_a, op_c, min_b, min_c);
}

int main(void)
{
    scanf("%s", &equation[0]);
    init();
    cal();
    
    return 0;
}