百元百雞的C語言實現及優化
阿新 • • 發佈:2018-12-11
題目:中國古代數學家張丘建在他的《算經》中提出了一個著名的“百錢百雞問題”:一隻公雞值五錢,一隻母雞值三錢,三隻小雞值一錢,現在要用百錢買百雞,請問公雞、母雞、小雞各多少隻?
方法一:使用三層迴圈解決。最內層迴圈每次增三,比自增一效率了三分之二。
#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; }