可以运行这是什么问题

#include<stdio.h>
int main()
{
    int o,i,t,j;
    scanf("%d%d",&o,&i);
    i=t*4+j*2;
    o=t+j;
    printf("%d,%d\n",t,j);
}
阅读 1.1k
2 个回答

看样子应该是想解决鸡兔同笼问题。

先说个非核心问题:这里的变量可以看出来 tj 分别表示兔和鸡。但 io 意义就不明确了。而且 o 很容易和数字 0 混淆,所以尽量不要使用单独的 o 来作为变量名。由于头和脚的拼音简称也是 tj,所以这里暂时改为英文的 hf 来表示(但实际上开发时不应该拼音和英文混用,而且变量名最好用单词或词组)

C语言不能自己解方程,所以需要先自己推导出来 tj 的函数表示,这里推导公式就上面提到了变量

$$ \begin{align} &\left\{ \begin{aligned} h & = t \times 4 + j \times 2\\ f & = t + j \end{aligned} \right. \\ \Rightarrow &\left\{ \begin{aligned} t&=\frac{f-2h}2\\ j&=\frac{4h-f}2 \end{aligned} \right. \end{align} $$

按推导出来的写程序(代码里用明确意义的单词):

#include <stdio.h>
int main() {
    int rabbit, chicken, head, foot;
    scanf("%d %d", &head, &foot);
    rabbit = (foot - head * 2) / 2;
    chicken = (head * 4 - foot) / 2;
    printf("%d, %d", rabbit, chicken);
}

不过一般来说,用程序解鸡兔同笼问题并不是要自己把方程解出来,而是采用程序比较擅长的处理方式:循环+判断

#include <stdio.h>

int main()
{
    int head, foot;
    scanf("%d %d", &head, &foot);
    printf("head: %d, food: %d\n", head, foot);
    for (int c = 0; c < head; c++) {
        if (c * 4 + (head - c) * 2 == foot) {
            printf("rabbbit: %d, chicken: %d\n", head - c, c);
            break;  // 找到答案即中止循环,不需要处理后面的情况了
        }
    }
}

你这是想解方程组吗?

程序里的 = 一般都是赋值,就是把右侧的值算出来,赋值给左边的变量。不是数学里方程组里的等号。

想解方程组,得自己先把方程组解出来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进