1. 程式人生 > >百元百雞的C語言實現及優化

百元百雞的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;
}