题目:中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?
方法一:使用三层循环解决。最内层循环每次增三,比自增一效率了三分之二。
#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;
}
4607





