我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题。
该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
普通话版就是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
由题目可知这两条公式:
公鸡+母鸡+小鸡 = 100
5*公鸡+3*母鸡+小鸡/3 = 100
记录分享一下我自己的做法
#include<stdio.h>
void ThreeUn(){
// 最朴素的方法 三个变量
// 三重for循环
int cock,hen,chick; // 三个变量分别为公鸡母鸡小鸡
for( cock = 0 ; cock <= 100 ; cock++ ){
for( hen = 0 ; hen <= 100-cock ; hen++ ){
for( chick = 0 ; chick <= 100-cock-hen ; chick++ ){
if( chick % 3 != 0 ) continue; //当小鸡数量不能被3整除时进行下次一循环
if( 5*cock + 3*hen + chick/3 == 100 && cock+hen+chick == 100 ){
printf("%d %d %d\n",cock,hen,chick);
}
}
}
}
}
void TwoUn(){
//两个变量
int cock,hen,chick;
for( cock = 0 ; cock <= 100 ; cock++ ){
for( hen = 0 ; hen <= 100-cock ; hen++ ){
chick = 100 - hen - cock; //根据鸡的总和必须为100,来给小鸡赋值
if( chick % 3 != 0 ) continue;//当小鸡数量不能被3整除时进行下次一循环
if( 5*cock + 3*hen + chick/3 == 100 ){
printf("%d %d %d\n",cock,hen,chick);
}
}
}
}
void OneUn(){
//一个变量
int cock,hen,chick;
//由cock+hen+chick=100和5*cock+3*hen+chick/3=100推出以下公式
//15*cock+9*hen+100-cock-hen = 300
//hen = (100-7cock)/4
for( int cock = 0 ; cock <= 100/5 ; cock++ ){//减少循环次数,cock<=100/5这个界限
hen = (100-7*cock)/4;
chick = 100 - cock - hen;
if( 5*cock + 3*hen + chick/3 == 100 && cock >= 0 && chick >= 0 && hen >= 0 ){
printf("%d %d %d\n",cock,hen,chick);
}
}
}
int main(){
ThreeUn();
printf("\n");
TwoUn();
printf("\n");
OneUn();
return 0;
}第一次写博客,有什么写得不好的地方可以在评论区提出来,我都会去看的。万分感谢
版权声明:本文为m0_52552463原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。