注册 登录
编程论坛 C语言论坛

无奈,看似没有任何技术含量,就是for嵌套循环,想得出结果太难

追梦人zmrghy 发布于 2023-03-14 21:14, 1005 次点击
标题很简单求 a,b,c,b四个数值。。。
只有本站会员才能查看附件,请 登录


之前有个百钱买百鸡的例子,
百钱买百鸡的例子是三个变量。
这个题目是四个变量。。。。
程序太简单了。。。。。
只有本站会员才能查看附件,请 登录


没有任何技术含量,想得结果太难了。
你会骂电脑这么笨,太没用了。
电脑会不会被气死,如果电脑会说话,它肯定要骂你让它运行这样的程序。。。。
电脑计算出结果的时间,人工完全可以完成100遍这种题目的运算。。。。



只有本站会员才能查看附件,请 登录

这样的人工计算,应该如何写成,程序代码。。。
各种运算结合律,如何写成程序代码。
程序执行时,程序如何选择哪一种运算结合律。。。。。
程序,需要有“思维”能力。。。。。
9 回复
#2
pvm20002023-03-15 00:57
电脑永远不笨的
#3
forever742023-03-15 19:01
由题图知,步长0.1就够用了,肯定不慢。
工科生一定要有工程意识 over all ,精度不是越高越好的。
#4
wp2319572023-03-16 15:07
回复 楼主 追梦人zmrghy
解方程 c 还是不行的
#5
追梦人zmrghy2023-03-16 20:15
回复 3楼 forever74
知道结果后,精度0.1就够了。。。。
不知道结果的时候,如何确定精度。。。。

我还考虑过会不会有负数,最后发现,a,b,d必须相同符号的。

不知道结果的时候,如何判断。。。
#6
forever742023-03-17 14:13
步长1试试
不行
步长0.1试试
行了
所以这就是结论
还不行
步长0.01试试
放在一起都相对较快的
#7
forever742023-03-17 14:14
这种东西初学者是不需要考虑解决通用问题的。
#8
s962812023-03-17 22:05
你解題的思路錯啦,直接爆破可不是甚麼好習慣
程序代码:
#include <stdio.h>

char reversion(char signal) {
    if (signal == '*') {
        return '/';
    } else if (signal == '/') {
        return '*';
    } else if (signal == '+') {
        return '-';
    } else if (signal == '-') {
        return '+';
    }
}

void get_equation(int A, int B, int C, int D, char x, char y, char z, char w, char* equ) {
    x = reversion(x);
    y = reversion(y);
    z = reversion(z);
    w = reversion(w);
    sprintf(equ,"a=%d%c(%d%c(%d%c(%d%ca)))",D,w,B,z,C,y,A,x);
}

float solve(int step) {
    float temp;
    for (float x = -9; x < 9*step; x++) {
        float ttemp;
        ttemp = (8*step-(5*step+(9*x/21)) - x);
        if (ttemp == 0) {
            return x/step;
        }
        if (x > 1 && (ttemp * temp < 0)) {
            break;
        }
        temp = ttemp;
    }
    solve(step*10);
}

float cal(float x, char opr, float y) {
    if (opr == '*') {
        return x*y;
    } else if (opr == '/') {
        return x/y;
    } else if (opr == '+') {
        return x+y;
    } else if (opr == '-') {
        return x-y;
    }
}


int main() {
    char equ[100] = {0};
    char x = '*';
    char y = '*';
    char z = '+';
    char w = '-';
    int A = 21;
    int B = 5;
    int C = 9;
    int D = 8;
    float a, b, c, d;
    get_equation(A, B, C, D, x, y, z, w, equ);
    printf("%s\n",equ);
    a = solve(1);
    b = cal(A, reversion(x), a);
    d = cal(C, reversion(y), b);
    c = cal(B, reversion(z), d);
    printf("a=%f\n", a);
    printf("b=%f\n", b);
    printf("c=%f\n", c);
    printf("d=%f\n", d);
    return 0;
}

代數解很多時候其實不難用
#9
追梦人zmrghy2023-03-18 00:53
回复 7楼 forever74
修改了一下,秒出结果
只有本站会员才能查看附件,请 登录
#10
追梦人zmrghy2023-03-18 00:58
回复 8楼 s96281
这么麻烦呀。。。
看,我修改后的。
秒出结果
只有本站会员才能查看附件,请 登录
1