百元百鸡的C语言实现及优化

题目:中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?

方法一:使用三层循环解决。最内层循环每次增三,比自增一效率了三分之二。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(int argc, char *argv[])
{
	/*中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:
	一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,
	请问公鸡、母鸡、小鸡各多少只?*/
	for (size_t i = 0; i < 100/5; i++)
	{
		for (size_t j = 0; j < 100/3; j++)
		{
			for (size_t k = 0; k < 100; k+=3)
			{
				if (i + j + k == 100 && i*5 + j*3 + k/3 == 100)
				{
					printf("公鸡:%d母鸡:%d小鸡:%d\n", i, j, k);
				}
			}
		}
	}
	system("pause");
	return 0;
}

方法二:使用双层循环解决。注意要加chicken % 3 == 0的条件,防止整数除法向下取整的情况。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(int argc, char *argv[])
{
	for (size_t i = 0; i < 100 / 5; i++)
	{
		for (size_t j = 0; j < 100 / 3; j++)
		{
			int chicken = 100 - i - j;
			if (i + j + chicken == 100 && i * 5 + j * 3 + chicken / 3 == 100 \
				&& chicken % 3 == 0)
			{
				printf("公鸡:%d母鸡:%d小鸡:%d\n", i, j, chicken);
			}
		}
	}
	system("pause");
	return 0;
}

 

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值