有一堆水果,其中苹果有 x 个,雪梨有 y 只,桃子有 z 只,从中任取 m 个水果 共有多少种不同的情况
这个题可以用一个三重循环来写,如下
这种写法大家都看到了, 是一个三重循环,要是数据量大,那将会耗费挺长的时间,于是我尝试用递归来写,应该是一个排列组合问题。
原理呢就是 :无论你选什么,最终只要凑够m个就好,而且有一个数量限制,不能说就一个苹果,却拿了3个,若一共有3个苹果,就最多只能拿3个,但是也能只拿两个把所有符合的情况加起来,就OK了。
多重循环代码
#include<stdio.h>
void choice(int x, int y, int z, int m) {
int i, j, k;
int sum = 0;
for (i = 0; i <= x; i++) {
for (j = 0; j <= y; j++) {
for (k = 0; k <= z; k++) {
if ((i + j + k) == m) {
sum++;
}
}
}
}
printf("共有%d种选择\n", sum);
}
int main()
{
int x, y, z, m;
scanf("%d %d %d %d", &x, &y, &z, &m);
choice(x, y, z, m);
return 0;
}