在生活中我们会遇到一些算数问题,我们常常通过解未知量来求得答案,那我们能否利用计算机语言来解决这个问题,让计算机告诉我们答案呢?
以简单的二元问题,“鸡兔同笼”问题为例子,我们总是列二元一次方程来解决,,那么使用计算机来计算时,是否需要这样呢?
事实上我们可以通过让计算机“穷举”来解决;通俗的理解就是让计算机一个一个地去尝试,只有满足结果时,才能输出正确结果。我们通过一个题目来认识:鸡兔共13只,共36只脚,那么鸡兔个多少只?我们来看看代码是如何编写的
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int a = 0, b = 0;//a为兔子数量,b为鸡的数量,共有13只,36只脚
for (a = 1; a <= 9; a++) {//a从1开始尝试,假设36只脚都是兔子的,不能超过9只
b = 13 - a;//b变量与a变量的关系
if (4*a + 2 * b==36) {//满足条件才输出
printf("兔子有%d只,鸡有%d只", a, b); break;
}
}return 0;
}
怎么样这个代码是不是比较简单,那么我们升级一下难度,假如有四个变量呢?
接下来我们看一道题:假设一个人买了①5只羊,4只犬,3只鸡,2只兔共1496;②4只羊,2只犬,6只鸡,3只兔共1175;③3只羊,1只犬,7只鸡,5只兔共958;④2只羊,3只犬,5只鸡,1只兔共861;我这四种动物每只多少钱(已知为整数)
我们看看这个代码该如何去写
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int a = 0, b = 0, c = 0, d = 0;//羊为a,犬为b,鸡为c,兔为d
for (a = 1; a <= 1496 / 5; a++){//就第一种情况而言,a不会超过1496,下面同理,只需大概限制范围即可,我们知道针对这种情况解是唯一的
for (b= 1; b <= 1496 / 4; b++){
for (c = 1; c <= 1496 / 3; c++){
for (d = 1; d <= 1496 / 2; d++){
if ((5 * a + 4 * b + 3 * c + 2 * d == 1496) && (4 * a + 2 * b + 6 * c + 3 * d == 1175) && (3 * a + 1 * b + 7 * c + 5 * d == 958) && (2 * a + 3 * b + 5 * c + 1 * d == 861)) {
printf("羊的价格为%d,犬的价格为%d,鸡的价格为%d,兔的价格为%d", a, b, c, d); break;
}
}
}
}
}return 0;}
同学们还要注意一下,如果答案不唯一我们只想输出最小的一个结果时,可以在if语句中加上break来跳出循环,实现最终目的;
同学们学会了吗?欢迎在评论区讨论!