Chinaunix

标题: 请高手点拨赐教一个C程序 [打印本页]

作者: ge_yong_linux    时间: 2011-03-18 14:41
标题: 请高手点拨赐教一个C程序
“A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些人参加了竞赛,哪些人没参加:A参加时,B也参加;B和C只有一个人参加;C和D或者都参加,或者都不参加;D和E中至少有一个人参加;如果E参加,那么A和D也都参加。用1表示参加,0表示不参加”敬请赐教点拨!!!谢谢
作者: rolleaway    时间: 2011-03-18 15:02
本帖最后由 rolleaway 于 2011-03-18 16:22 编辑

a  b c d e=0,1
a+b=2  or (a=0,b=1) or a+b=0
b+c<=1
c+d=2 or c+d=0
d+e>=1
---------------------
if e=1
  e+a+d=3
then
a+b+ c+ d+ e =5
和b+c<=1冲突

故e=0

c,d参加
作者: ge_yong_linux    时间: 2011-03-18 15:44
回复 2# rolleaway


   请问! 用C怎么实现啊?
作者: wb112200    时间: 2011-03-18 16:36

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void main()
  4. {
  5.         int n = 31; // 00011111 2的5次方-1


  6.         for(int i=n; i>= 0; i--)
  7.         {
  8.                 int a = (i&16)>>4;// 16: 00010000
  9.                 int b = (i&8)>>3; //  8: 00001000
  10.                 int c = (i&4)>>2; //  4: 00000100
  11.                 int d = (i&2)>>1; //  2: 00000010
  12.                 int e = i&1; //  1: 00000001

  13.                 ////打印
  14.                 //printf("%d,%d,%d,%d,%d\n", a, b, c, d, e);

  15.                 if(a == 1)
  16.                 if(b != 1) continue;

  17.                 if(b == 1)
  18.                 if(c != 0) continue;
  19.                 if(c == 1)
  20.                 if(b != 0) continue;

  21.                 if(c == 1)
  22.                 if(d != 1) continue;
  23.                 if(c == 0)
  24.                 if(d != 0) continue;
  25.                 if(d == 1)
  26.                 if(c != 1) continue;
  27.                 if(d == 0)
  28.                 if(c != 0) continue;

  29.                 if((d == 0)&&(e == 0)) continue;

  30.                 if(e == 1)
  31.                 if((a != 1)||(b != 1)) continue;

  32.                 // 输出结果
  33.                 printf("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
  34.         }
  35. }
复制代码
a=1,b=1,c=0,d=0,e=1
a=0,b=0,c=1,d=1,e=0
作者: wb112200    时间: 2011-03-18 16:37
两种结果: a b e  或者 c d
作者: rolleaway    时间: 2011-03-18 17:17
如果E参加,那么A和D也都参加
作者: rolleaway    时间: 2011-03-18 17:21
#include<unistd.h>
int main(void){
int a,b,c,d,e;

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++)
          if((((a+b)==2)||(a==0))&&(b+c<=1)&&(((c+d)==2)||((c+d)==0))&&(d+e>=1)&&(((e+a+d)==3)||(e==0)))
          {
           printf("a=%d,b=%d,c=%d,d=%d,e=%d\n",a,b,c,d,e);
          }          
exit(0);
}
作者: rolleaway    时间: 2011-03-18 17:22
a=0,b=0,c=1,d=1,e=0
作者: ge_yong_linux    时间: 2011-03-18 20:21
回复 4# wb112200


    编译不能通过啊
改工作目录为:C:\Program Files\超想中英对照编程学习系统\bin
正在写出临时程序文件....
写出临时程序文件成功!
写出批处理文件成功!
正在编译程序....
错误   11: 表达式语法错 在函数        
错误   11: 非法字符 '? (0xb5) 在函数        
错误   11: 非法字符 '? (0xc4) 在函数        
错误   11: 非法字符 '? (0xb4) 在函数        
错误   11: 非法字符 '? (0xce) 在函数        
错误   11: 非法字符 '? (0xb7) 在函数        
错误   11: 非法字符 '? (0xbd) 在函数        
错误   17: 未定义的符号'i' 在函数        
警告?   17: 无效操作代码 在函数        
错误   17: 语句缺少';' 在函数        
错误   33: 非法字符 '? (0xb4) 在函数        
错误   33: 非法字符 '? (0xf2) 在函数        
错误   33: 非法字符 '? (0xd3) 在函数        
错误   33: 非法字符 '? (0xa1) 在函数        
错误   83: 非法字符 '? (0xca) 在函数        
错误   83: 非法字符 '? (0xe4) 在函数        
错误   83: 非法字符 '? (0xb3) 在函数        
错误   83: 非法字符 '? (0xf6) 在函数        
错误   83: 非法字符 '? (0xbd) 在函数        
错误   83: 非法字符 '? (0xe1) 在函数        
错误   83: 非法字符 '? (0xb9) 在函数        
错误   83: 非法字符 '? (0xfb) 在函数        
警告?   89: 'n' 指定一个值给从未使用过的哪一个 在函数        
***    21 错误在编译     ***


        可用内存  392142      

编译失败!
作者: bowalker    时间: 2011-03-18 20:28
怎么会失败?
gcc通过!
作者: ge_yong_linux    时间: 2011-03-18 20:29
回复 7# rolleaway


    谢谢,不过开头的头文件不能编译通过改成#include<stdio.h>后就通过了。
作者: ge_yong_linux    时间: 2011-03-18 20:31
回复 7# rolleaway


   谢谢! 开头的头文件编译不通过,改成#include<stdio.h>就行了。
作者: ge_yong_linux    时间: 2011-03-18 20:45
回复 5# wb112200


    如果E参加,那么A和D也都参加.a,b,e 不可能同时参加啊?
作者: PKkingSon    时间: 2011-03-18 20:50
这是数学题
作者: wb112200    时间: 2011-03-18 21:19
回复 9# ge_yong_linux


    不应该吧 你再试试
作者: wb112200    时间: 2011-03-18 21:21
回复 13# ge_yong_linux


    {:3_196:}  这里条件写错了
   if(e == 1)
     if((a != 1)||(b != 1)) continue;   
    写成 b 了 ....
作者: ge_yong_linux    时间: 2011-03-18 21:54
回复 16# wb112200


    哦!呵呵,谢谢啊
作者: nizvoo    时间: 2011-03-19 00:01
直接判斷就行了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2