命题真假

小灰灰 2022-06-18 09:29 295阅读 0赞

A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:

  1. 如果A参加,B也参加;
  2. 如果C不参加,D也不参加;
  3. A和C中只能有一个人参加;
  4. B和D中有且仅有一个人参加;
  5. D、E、F、G、H 中至少有2人参加;

  6. C和G或者都参加,或者都不参加;

  7. C、E、G、I中至多只能2人参加
  8. 如果E参加,那么F和G也都参加。
  9. 如果F参加,G、H就不能参加
  10. 如果I、J都不参加,H必须参加

请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能,则输出所有的可能情况。每种情况占一行。参赛同学按字母升序排列,用空格分隔。

比如:C D G J就是一种可能的情况。

  1. #include <stdio.h>
  2. void num2array(int a[], int n) //将10名同学所有可能的情况考虑到,即A同学可以参加也可以不参加两种情况,B同学也一样,C...D....所有情况就是2的10次方;
  3. {
  4. int i;
  5. for (i=9; i>=0; i--)
  6. {
  7. a[i]= n % 2;
  8. n = n / 2;
  9. }
  10. }
  11. int is_ok(int a[]) //根据给出的约束条件得到下面,这里是取反面情况返回0,最后符合条件的返回1;
  12. {
  13. if (a[0] && !a[1]) return 0;
  14. if (!a[2] && a[3]) return 0;
  15. if (a[0] && a[2]) return 0;
  16. if ((a[1] && a[3]) || (!a[1] && !a[3])) return 0;
  17. if (a[3]+a[4]+a[5]+a[6]+a[7]<2) return 0;
  18. if (a[2]+a[6]==1) return 0;
  19. if (a[2]+a[4]+a[6]+a[8]>2) return 0;
  20. if (a[4] && a[5]+a[6]<2) return 0;
  21. if (a[5] && a[6]+a[7]>0) return 0;
  22. if (a[8]+a[9]==0 && !a[7]) return 0;
  23. return 1;
  24. }
  25. void print_result(int a[])
  26. {
  27. int i;
  28. for (i=0; i<10; i++)
  29. if (a[i])
  30. printf("%c ", 'A'+i );
  31. printf("\n");
  32. }
  33. int main()
  34. {
  35. int i, a[10];
  36. for (i=0; i<1024; i++)
  37. {
  38. num2array(a, i);
  39. if (is_ok(a))
  40. print_result(a);
  41. }
  42. return 0;
  43. }

发表评论

表情:
评论列表 (有 0 条评论,295人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL 真假read_only

    在主从复制中,为了保护从库不被写入,往往会在从库设置set global read\_only=on; 当打开read\_only以后,MySQL不允许客户端用户修改任何数

    相关 JS Python真假判断

    问题 在看算法时,出现这样的问题(真假值判断问题) JS 需要求数组的长度 才能判断为 空数组(返回false) Python 不需要求数组的长度 就可以判

    相关 IBM笔记本真假辨认手册

      IBM的本本一直是深受众人喜欢的一款笔记本。在购买的时候,对于普通用户来说如何选到一款货真价实的本本将是采购者的最大心愿。下面是我以前在选购IBM本本的时候整理的文档,希望

    相关 附件:真假上传

    新增的时候,上传存在前端一个list里面;删除是真删除,直接删除 编辑的时候,删除是假删除,把删除的数据id存在一个list里 ![watermark_type_ZHJva

    相关 【牛腩】-真假分页

    – – 分页在web程序中很常用。当从数据库中查询出数据,展示在界面上的时候,如果数量很大,就需要分页,一页一页地展示给用户。这时候就用到了分页。分页是在界面上的展示效果。所

    相关 ASP.NET——真假分页

          所谓分页,就是把所有要显示的内容分成n多页来显示。那为什么要用分页而不直接全部显示呢?这就好比一本书,我们可以用一张纸写完全部书的内容,但实际上并不是这么做的。我们

    相关 命题真假

    A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束: 1. 如果A参加,B也参加;

    相关 死亡命题

    最近一段时间,很奇怪,好多同学私信问我“前端和 Java 该怎么选”的问题,说句实在话,这是一个死亡命题啊! ![1179389-94d8f2ab66e9e5ff.png][