有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少?
请累计所有的可能组合方案,以及每一种方案,以(大,中,小)的形式输出,如测试说明所示。
答:
从题中我们可以知道大马最多有33匹(3*34>100),中马最多有50匹,每匹小马驮1/2担,所以我们设置变量大、中、小马对应 max、mid、min。
也就是当大马的个数为33且依次递减1时,中马的个数为50且依次递减1时,满足3*max+2*mid+min*1/2==100,时打印符合条件的三个变量即可。
//百马百石
#include<stdio.h>
int main()
{
int max, mid, min;
for (max = 33; max >= 0; max--)
{
for (mid = 50; mid >= 0; mid--)
{
min = 100 - max - mid;
if (max * 3 + mid * 2 + min * 1 / 2 == 100)
{
printf("大马%d只,中马%d只,小马%d只\n", max, mid, min);
}
}
}
return 0;
}
第二种写法
//百马百石
#include <stdio.h>
int main()
{
int max, mid, min, count=0;
for (max = 0; max <= 33; max++)
for (mid = 0; mid <= 50; mid++)
for (min = 2; min <= 100; min = min + 2)
if (max * 3 + mid * 2 + min * 1 / 2 == 100 && max + mid + min == 100)
{
printf("大马%d只,中马%d只,小马%d只\n", max, mid, min);
count++;
}
printf("count=%d", count);
return 0;
}