百鸡百钱问题

 我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题。

该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

普通话版就是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

由题目可知这两条公式:

公鸡+母鸡+小鸡 = 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版权协议,转载请附上原文出处链接和本声明。