问题如下
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;
- }