一共36人,一次性搬36块砖,每个男人依次能搬4块,每个女人一次能搬3块,每两个小孩能搬1块砖
问:求男人,女人,小孩分别有多少个?
// 三重循环
#include <stdio.h>
int main() {
int man, woman, child;
for (man = 1; man <= 36; man++) {
for (woman = 1; woman <= 36; woman++) {
for (child = 2; child <= 36; child += 2) {
if (man + woman + child == 36 && man * 4 + woman * 3 + child / 2 == 36) {
printf("男的有:%2d人\n", man);
printf("女的有:%2d人\n", woman);
printf("小孩有:%2d人\n", child);
}
}
}
}
return 0;
}
优化方式,男人不能超过9人,因为4*9=36;女人不能超过12人;因为3*12=36
小孩数量等于总数量减去男人和女人的数量,可以使循环嵌套次数减一
优化后是一个二重循环
int main() {
int man, woman, child;
for (man = 1; man <= 9; man++) {
for (woman = 1; woman <= 12; woman++) {
child = 36 - man - woman;
if (child % 2 == 0 && man * 4 + woman * 3 + child / 2 == 36) {
printf("男的有:%2d人\n", man);
printf("女的有:%2d人\n", woman);
printf("小孩有:%2d人\n", child);
}
}
}
return 0;
}
// 注:小孩数量必须是偶数