不好意思,因为太忙,所以这两天没很好滴在论坛里学习。首先,对ltc.owner同学表示歉意,可能你对我说话的方式有所误解,我只是对原帖http://bbs.pfan.cn/post-319036.html 中9楼的解法表示钦佩,并非对你有所侧指。其实大家都一样,并无谁高谁低之分,可能有所区分只是个性的差矣而已。
看来你对rpg很感兴趣,那么就希望今后多来论坛参与讨论。对于rpg我知之甚少,所以可能无法直接对你提供帮助,至于你提出的方法和方向的问题,我想在你的帖子里同仁志士们都已说的很清楚了。对于你提的有关“参加者”的问题,我还是想说9楼的代码是C之使用穷举的典范,你该多多阅读。另外,你在原帖里提了如何使用C++完成的问题,今天休息的时候我写了一些代码,希望对你有所帮助,其实还是穷举的应用,只不过多了一些container,iterator。如果你能对STL有所了解,可能读起来比C的方式更“人性化”一些。本想直接回复,不想你结贴了。
另附,对你立即马上使用简体中文表示支持。:)
代码如下:
#include <set>
#include <string>
#include <iostream>
using namespace std;

typedef set<bool>                    VOTER; //参加者
typedef set<bool>::const_iterator    ITER;  //迭代器

class TCondition //一个条件类型,实为function object当初曾试图推至泛型,所以使用了f.o. 可用function完成
{
public:
    TCondition()
        : _nCount(0) {}
    void operator() (const VOTER& set_a, const VOTER& set_b, const VOTER& set_c,
        const VOTER& set_d, const VOTER& set_e) const; // overload ()
    unsigned Count() const { return _nCount; }
private:
    mutable unsigned _nCount; 
};

int main(int, char **, char **)
{
    VOTER set_a, set_b, set_c, set_d, set_e;   //5个准参加者,表为set,每一element为2个状态 true false
    set_a.insert(false);  
    set_a.insert(true);
    set_b.insert(false);
    set_b.insert(true);
    set_c.insert(false);
    set_c.insert(true);
    set_d.insert(false);
    set_d.insert(true);
    set_e.insert(false);
    set_e.insert(true);
    
    TCondition condition;
    condition(set_a, set_b, set_c, set_d, set_e);  //判断
    
    std::cout << "Counter is  : " << condition.Count() << std::endl;  //结果数
    
}

inline void
TCondition::operator() (const VOTER& set_a, const VOTER& set_b, const VOTER& set_c,
                        const VOTER& set_d, const VOTER& set_e) const
{
    for (ITER it_a = set_a.begin(); it_a != set_a.end(); ++it_a)//枚举每个set的每个状态....
        for (ITER it_b = set_b.begin(); it_b != set_b.end(); ++it_b)
            for (ITER it_c = set_c.begin(); it_c != set_c.end(); ++it_c)
                for (ITER it_d = set_d.begin(); it_d != set_d.end(); ++it_d)
                    for (ITER it_e = set_e.begin(); it_e != set_e.end(); ++it_e)
                    {
                        if (*it_a == true)                       //A参加 则B参加
                            if (!(*it_b == true)) continue;
                            
                            if ((!*it_b || !*it_c) == false)     //B...C...
                                continue;
                            if (*it_c != *it_d)                  //C...D...
                                continue;
                            if ((!*it_d && !*it_e) == true)      //D...E....
                                continue;
                            if (*it_e == true)                   //E...A....D.....
                                if ( *it_a != true || *it_d != true) continue;
                            std::cout << static_cast<string>(*it_a ? "A参加." : "A不参加.") << std::endl
                                    << static_cast<string>(*it_b ? "B参加." : "B不参加.") << std::endl
                                    << static_cast<string>(*it_c ? "C参加." : "C不参加.") << std::endl
                                    << static_cast<string>(*it_d ? "D参加." : "D不参加.") << std::endl
                                    << static_cast<string>(*it_e ? "E参加." : "E不参加.") << std::endl;
                            _nCount++;
                    }
                    
}
结果同样为 A不参加, B不参加, C参加, D参加, E不参加
祝顺利!

原题附上:
A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
  人参加了竞赛:

   (1)A参加时,B也参加;

   (2)B和C只有一个人参加;

   (3)C和D或者都参加,或者都不参加;

   (4)D和E中至少有一个人参加;

   (5)如果E参加,那么A和D也都参加。