C语言排列组合问题,急急急!

从7种颜色中选n种,要求:红色必须有,蓝绿不能同时选。问有多少种选法?7色:A~G(红色为A,蓝色为E,绿色为D)如:输入:6输出:ABCDFGABCEFGTotal=2... 从7种颜色中选n种,要求:红色必须有,蓝绿不能同时选。问有多少种选法?

7色:A~G(红色为A,蓝色为E,绿色为D)
如:输入:6
输出:ABCDFG
ABCEFG
Total=2
展开
 我来答
_一蓑烟雨晴
2015-09-05 · TA获得超过271个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:105万
展开全部

既然红色必须有,那就可以把问题简化为在六种颜色中选,即BCDEFG.

那蓝绿不能同时选,那只需要一个判断条件就可以啦,

这个需要用到回溯法(递归求解)

下面给你一些思路

//代表7种颜色,初始为0,表示没有被选中,1代表被选中
int color[7]={1,0,0,0,0,0,0};  
 
//i表示正在判断第i个颜色是否被选取,n表示要选择n种
void powerset(int i,int n){    
     if(i>7){
        //如果在color数组中有n个元素是1,且color[3]和color[4]不同时为1              //则输出数组中所有为1的元素
    }
    else{
        取第i个元素;
        powerset(i+1,n);

        舍第i个元素;
        powerset(i+1,n);
    }
}
wenqing8585
2015-09-05 · TA获得超过8252个赞
知道大有可为答主
回答量:8078
采纳率:70%
帮助的人:3839万
展开全部
代码如下:
#include <stdio.h>

char color[]={'A','B','C','D','E','F','G'};

char output[8]={'A',0};

int count=0;

int checkDE(void)

{

int i,j=0;

for(i=0;i<strlen(output);i++)

{

if((output[i]=='D')||(output[i]=='E'))

{

j++;

}

}

if(j>1)

{

return -1;

}

return 0;

}

void getCount(char *in,char *out, int number, int select)

{

int i;

if (select==1)

{

for(i=0;i<number;i++)

{

out[0]=in[i];

if(checkDE()==0)

{

printf("%s\n",output);

count++;

}

}

}

else

{

for(i=0;i<number;i++)

{

out[0]=in[i];

getCount(in+i+1, out+1, number-i-1, select-1);

}

}

return;

}

int main()

{

int n;

printf("input n: ");

scanf("%d", &n);

if(n>7)

{

return 0;

}

if(n<=1)

{

printf("%s\n",output);

printf("Total=1\n");

}

else

{

getCount(&color[1],&output[1],6,n-1);

printf("Total=%d\n",count);

}

return 0;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HDPSparkStorm
2015-09-05
知道答主
回答量:6
采纳率:0%
帮助的人:4.5万
展开全部
一元搞定~有意可私信
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式