/若一个口袋中放有12个球,其中有3个红的3个白的和6个黑的,每次从中任取8个球,编写程序求出有多少种不同的颜色搭配/
#include<stdio.h>
int main()
{
int m, n, number=0;
printf(" 红球 白球 黑球\n");
for( m=0;m<=3;m++ )
for( n=0;n<=3;n++ )
if(8-m-n<=6)
printf(" %2d: %d %d %d \n", ++number, m, n, 8-m-n);
return 0;
}
if是判断如果球是否够8个的情况,m和n的循环是套循环的,if在内循环内部的判断,由于可能会出现m + n < 2的情况,黑球最多6个,所以此时不能满足取8个球的需求,所以这里需要增加个判断过滤掉m + n < 2的情况。以下是该需求的完整代码供参考:
int m, n, number = 0;
printf("搭配: 红球 白球 黑球\n");
for (m = 0; m <= 3; m++) {
for (n = 0; n <= 3; n++) {
if (8 - m - n <= 6) {
printf("%2d: %d %d %d\n", ++number, m, n, 8 - m - n);
}
}
}
return 0;
你可以写成三重循环,但是每次取8个球是固定的,写成三重循环后面也得加条件判断if(m+n+k==8)(ps:假设你加了for(k=0;k<=6;k++))
但是呢,在m和n确定的情况下,满足m+n+k=8的k是不是就唯一了?还有必要加第三个for循环吗?
for循环的是对数目的遍历,前面红白两个for循环的意义就是0,1,2,3球数可能的遍历,但是当白球和红球两个循环进来后,剩下的黑球的数目就编程条件要求,就是8-m-n , 要满足8个要求,所以就要用if,如果再用for 循环,意义在哪呢,两个for循环进来后,黑球数目只有满足条件可用,其他种情况就要丢弃,再用for循环就是脱裤子放屁,还要根据条件把不0满足8的情况丢弃。
你这个判断存在bug哈!需要判断8-n-m>=0。要是n+m>8了,那就是灾难。也就是这题没挖这个坑。