Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5771799
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类:

2006-07-30 18:26:54

推理题:有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:
1.A,B两人至少有1人参加会议。
2.A,E,F3人中有2人参加会议。
3.B和C两人一致决定,要么两人都去,要么两人都不去。
4.A,D两人中只1人参加会议。
5.C,D两人中也只要1人参加会议。
6.如果D不去,那么E也决定不去。那么最后究竟有哪几个人参加了会议呢?


CODE:

#include
#include
void change(bool a[],int size,int index);
const int size=6;
void main()
{
    bool a[size];
    int Right=0;
    char ch='A';
    for (int i=0;i         change(a,size,i);
        if ((a[0] && a[1])==false) continue;
        if (a[0]+a[4]+a[5]!=2) continue;
        if (a[1]+a[2]==1) continue;
        if (a[0]+a[3]!=1) continue;
        if (a[2]+a[3]!=1) continue;
        if (a[3]==false && a[4]==true) continue;
        break;
    }
    for (i=0;i         cout<         ch+=1;
    }
}

void change(bool a[],int size,int index)
{
    for (int i=0;i         a[i]=false;
    if (index>=pow(2,size)) return;
    i=size-1;
    while (index>0) {
        a[i]=index % 2;
        index=index/2;
        i--;
    }
}
分析:
(1) (A+B-1)(A+B-2)=0
(2) A+E+F = 2
(3) (B+C)(B+C-2)=0
(4) A+D=1
(5) C+D=1
(6) (D^2+E^2)(D-1)=0

(4) - (5) ==> A=C, 代入 (3) 得到 (A+B)(A+B-2) = 0
再与 (1) 比较,知道 A+B-2 = 0 ==> A=B=1 ==> A=B=C=1 ==> D=0 ==> E=0 ==> F=1

A=B=C=F=1, D=E=0


关于change函数的作用,是生成所有的可能,共pow(2,size)种。

跟进去看就知道了,index是0到2的6次方,假设index是7,循环地%2和/2,得到一组数组,1 1 1,其实就是7的2进制,不同的index代表不同的2进制,那也就是不同的数组




阅读(1109) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~