c++编程,一个小组共五人,分别为A,B,C,D,E.现有一项任务,要他们中的3个人去完成。

2025-05-20 14:48:34
推荐回答(2个)
回答1:

大致简单编程了一下,用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;
}

回答2:

#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;
}