C语言for循环的利用--“穷举”解决问题

        在生活中我们会遇到一些算数问题,我们常常通过解未知量来求得答案,那我们能否利用计算机语言来解决这个问题,让计算机告诉我们答案呢?

        以简单的二元问题,“鸡兔同笼”问题为例子,我们总是列二元一次方程来解决,,那么使用计算机来计算时,是否需要这样呢?

        事实上我们可以通过让计算机“穷举”来解决;通俗的理解就是让计算机一个一个地去尝试,只有满足结果时,才能输出正确结果。我们通过一个题目来认识:鸡兔共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来跳出循环,实现最终目的;

同学们学会了吗?欢迎在评论区讨论!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值