大致简单编程了一下,用1、2、3、4、5分别表示ABCDE;用i、j、k分别表示三重变量进行循环,程序如下(有注释,某些情况自动忽略了:比如A不能出现在第二重第三重循环中......):
#include
int main(){
printf("此项任务可以由如下三人组合:\n");
for(int i=1;i<=5;i++){
for(int j=i+1;j<=5;j++){
for(int k=j+1;k<=5;k++){ //用i-j-k三个变量枚举三个人的组合情况
if((i==1&&j==3)||(i==1&&k==3))//AC不能都去
continue;
if(i==2&&j==3&&k==4)//BCD不能都去
continue;
int cnt=0;//BC至少需要去一个
if(i==2||j==2)cnt++;
if(i==3||j==3||k==3)cnt++;
if(cnt==0)
continue;
cnt=0;
if(i==3){//如果i=C,C去了,D、E就只能去一个;
if(j==4||k==4)cnt++;
if(j==5||k==5)cnt++;
}
if(cnt!=1)continue;
cnt=0;
if(j==3){//如果j=C,C去了,D、E就必须去一个;
if(k==4||k==5)
cnt++;
}
if(cnt==0)
continue;
if(k==3)//如果k=C,C去了,D、E就只能去一个;
continue;
if(i==2||j==2){//如果B去了,D、E就不能都去。
if(j==4||j==5||k==4||k==5)
continue;
}
printf("%c %c %c\n",'A'+i-1,'A'+j-1,'A'+k-1);
}
}
}
return 0;
}
#include
using namespace std;
int main()
{
char i,c,group[5];
bool ok;
for(group[0]=0;group[0]<2;group[0]++)
{
for(group[1]=0;group[1]<2;group[1]++)
{
for(group[2]=0;group[2]<2;group[2]++)
{
for(group[3]=0;group[3]<2;group[3]++)
{
for(group[4]=0;group[4]<2;group[4]++)
{
ok=true;
if((group[0]&&group[2])||(group[1]&&group[2]&&group[3])||(!group[1]&&!group[2]))
{
ok=false;
continue;
}
if(group[2]&&((!group[3]&&!group[4])||(group[3]&&group[4])))
{
ok=false;
continue;
}
if(group[1]&&(group[3]&&group[4]))
{
ok=false;
continue;
}
if(ok)
{
c=0;
for(i=0;i<5;i++)
{
if(1==group[i])
c++;
}
if(3==c)
{
for(i=0;i<5;i++)
{
if(1==group[i])
cout<<(char)('A'+i)<<' ';
}
cout<
}
}
}
}
}
}
return 0;
}