当前位置: 代码迷 >> C语言 >> 一个很有意思的题目但有点难
  详细解决方案

一个很有意思的题目但有点难

热度:110   发布时间:2007-03-21 13:59:31.0
一个很有意思的题目但有点难

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

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

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

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

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

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

这程序怎么写,我的想法是去的人输出1,不出的输出0好了

搜索更多相关的解决方案: 计算机  

----------------解决方案--------------------------------------------------------
#include<stdio.h>
void main()
{
int a,b,c,d,e;
int c1,c2,c3,c4,c5;
for(a=0;a<2;a++)
for(b=0;b<2;b++)
for(c=0;c<2;c++)
for(d=0;d<2;d++)
for(e=0;e<2;e++)
{
c1=a&&!b?0:1;
c2=(b&&!c)||(c&&!b)?1:0;
c3=c==d?1:0;
c4=(d||e);
c5=e&&!(a&&d)?0:1;
if(c1&&c2&&c3&&c4&&c5)
printf("%d %d %d %d %d \n",a,b,c,d,e);
}
}
这是我写的,看看有没有对
----------------解决方案--------------------------------------------------------
#include <stdio.h>
int main()
{
int i,a,b,c,d,e;
int dir[5]={1,2,4,8,16};
for (i=0;i<32;i++)
{
a=((i&dir[0]));
b=((i&dir[1])>>1);
c=((i&dir[2])>>2);
d=((i&dir[3])>>3);
e=((i&dir[4])>>4);
if (a && !b ) continue;
if (! b ^ c ) continue;
if ( c ^ d ) continue;
if ( !( d || e ) ) continue;
if (e&&!(a&&d)) continue;
printf("a:%d b:%d c:%d d:%d e:%d\n",a,b,c,d,e);
}
return 0;
}

[此贴子已经被作者于2007-3-21 16:44:57编辑过]


----------------解决方案--------------------------------------------------------
佩服楼上
----------------解决方案--------------------------------------------------------
不过你好象把if (e&amp;&amp;!(a&amp;&amp;b)) continue;中的d写成了b了
----------------解决方案--------------------------------------------------------


----------------解决方案--------------------------------------------------------
真的...不小心写错了...
已改正。
呵呵,谢谢大家支持
----------------解决方案--------------------------------------------------------
不过是个老贴子了吧。
----------------解决方案--------------------------------------------------------
  相关解决方案