您的位置:首页 > 编程语言 > C语言/C++

类抽屉问题的C++解决

2008-09-30 19:15 281 查看
问题如下
A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。

这种应该是抽屉问题吧,呵呵,小学时数学竞赛好像看过,不知道术语对不对。。用代码实现。
遗留一个问题点就是程序里用的那几个for循环,看着太多了,很不舒服,可一时也不知道怎么处理。。

//example 1-1

#include <iostream>

using namespace std;

//enum persion{A,B,C,D,E};

bool checkuser(bool a,

bool b,

bool c,

bool d,

bool e)

{

//when a go,so do b

if(a)

{

if(!b)

{

return false;

}

}

//between b and c , only one can go

if(b && c){return false;}

//c and d,their go together

if(c != d){return false;}

//d and e,one should go at least

if(!d || e){return false;}

//if e go,a and d alse go

if (e)

{

if (!a && d)

{

return false;

}

}

return true;

}

void output(bool a,

bool b,

bool c,

bool d,

bool e)

{

a?cout<<"A参加します"<<endl:cout<<"A参加していません"<<endl;

b?cout<<"B参加します"<<endl:cout<<"B参加していません"<<endl;

c?cout<<"C参加します"<<endl:cout<<"C参加していません"<<endl;

d?cout<<"D参加します"<<endl:cout<<"D参加していません"<<endl;

e?cout<<"E参加します"<<endl:cout<<"E参加していません"<<endl;

}

int main()

{

for(int aa = 0; aa < 2; aa++)

{

for(int bb = 0; bb <=1; bb++)

{

for(int cc = 0; cc <=1; cc++)

{

for(int dd = 0; dd <=1; dd++)

{

for(int ee = 0; ee <=1; ee++)

{

bool a = (aa == 1)?true:false;

bool b = (bb == 1)?true:false;

bool c = (cc == 1)?true:false;

bool d = (dd == 1)?true:false;

bool e = (ee == 1)?true:false;

if(checkuser(a, b, c ,d ,e))

{

output(a, b, c ,d ,e);

}

}

}

}

}

}

system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: