注册 登录
编程论坛 C++教室

作业问题!求给点思路!!谢谢!

andly2013 发布于 2013-07-11 11:35, 960 次点击
A,B,C,D,E五个学生参加活动,编写程序,根据下列条件判断哪些人参加了活动?
1)A参加时,B也参加
2)B和C只有一个人参加
3)C和D或者都参加,或者都不参加
4)D和E中至少一人参加
5)如果E参加,那么A和D也参加

如题:本人新手,这该用什么方式写比较好?
代码在第二页!有兴趣的看下

[ 本帖最后由 andly2013 于 2013-7-11 18:57 编辑 ]
10 回复
#2
andly20132013-07-11 11:49
求给点意见,谢谢!!
#3
peach54602013-07-11 12:46
最笨的方法,循环遍历
#4
peach54602013-07-11 12:51
五个人,可以看成是五位二进制
也就是说需要
for (n:0-31)

假设高地位按照ABCDE排列...
1)A参加时,B也参加
n & 0x18 > 0
2)B和C只有一个人参加
n & 0x8 ^ n & 0x4 > 0
3)C和D或者都参加,或者都不参加
4)D和E中至少一人参加
5)如果E参加,那么A和D也参加

剩下的自己写
#5
rjsp2013-07-11 15:07
写了个程序,算出来是 00110
#6
peach54602013-07-11 16:24
以下是引用rjsp在2013-7-11 15:07:34的发言:

写了个程序,算出来是 00110

yeah,恭喜你,答对了
#7
jnuwanghj2013-07-11 17:04
怎么弄的?没有思路吗?
#8
子楠2013-07-11 17:28
回复 4楼 peach5460
可否再详解一下
#9
peach54602013-07-11 17:28
以下是引用jnuwanghj在2013-7-11 17:04:58的发言:

怎么弄的?没有思路吗?

没思路的话,4L是什么?
#10
peach54602013-07-11 17:29
以下是引用子楠在2013-7-11 17:28:07的发言:

可否再详解一下

还要怎么详细啊...基本算法都介绍得差不多了,再要详细就只能上代码了
#11
andly20132013-07-11 18:46
谢谢了!另附一下代码。。
#include <iostream>
#include <cstdlib>

using namespace std;

#define NOTAKE 0
#define TAKE 1

#define A (players & 0x01)
#define B ((players & 0x02)>>1)
#define C ((players & 0x04)>>2)
#define D ((players & 0x08)>>3)
#define E ((players & 0x10)>>4)

int players;

void test();
bool check();

int main()
{
    test();
   
    system("pause");
    return 0;
}

void test()
{
    for (players = 0; players < 32; players++)
    {
        if (check())
        {
            if (A == TAKE){cout << "A ";}
        
            if (B == TAKE){cout << "B ";}
        
            if (C == TAKE){cout << "C ";}
        
            if (D == TAKE){cout << "D ";}
   
            if (E == TAKE){cout << "E ";}
            
            cout<<endl;
        }
    }

}

bool check()
{
    bool False = false ;

    if (((A == TAKE)? B == TAKE: true)
        && (B != C)
        && (C == D)
        && (D == TAKE || E == TAKE)
        && (E == TAKE? (A == TAKE && D == TAKE): true))
    {
        return true;
    }
    else
    {
        return False;
    }
   
}

[ 本帖最后由 andly2013 于 2013-7-11 18:52 编辑 ]
1