| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3992 人关注过本帖, 3 人收藏
标题:A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能 ...
只看楼主 加入收藏
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
结帖率:83.33%
收藏(3)
已结贴  问题点数:20 回复次数:22 
A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束
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
就是一种可能的情况。
搜索更多相关主题的帖子: 计算机 有一个人 同学 
2011-06-03 20:25
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:2 
我知道这是穷举 但是我写不出来...  坐等高手

                                         
===========深入<----------------->浅出============
2011-06-03 21:29
夜叶
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:104
专家分:189
注 册:2011-5-7
收藏
得分:2 
觉得是穷举,但又无从下手,嗨,等高手指导
2011-06-03 22:03
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:2 
#include <stdio.h>

void Test(int comb)
{
    int a[10], i;
   
    for(i = 0; i < 10; a[i] = (comb >> i++) & 1);
   
    if(!a[0] || a[1]) /*1. 如果A参加,B也参加;*/
    if(a[2] || !a[3]) /*2. 如果C不参加,D也不参加;*/
    if(!a[0] || !a[2]) /*3. A和C中只能有一个人参加;*/
    if(a[1] && !a[3] || !a[1] && a[3]) /*4. B和D中有且仅有一个人参加;*/
    if(!(a[3] && !a[4] && !a[5] && !a[6] && !a[7] ||
        !a[3] && a[4] && !a[5] && !a[6] && !a[7] ||
        !a[3] && !a[4] && a[5] && !a[6] && !a[7] ||
        !a[3] && !a[4] && !a[5] && a[6] && !a[7] ||
        !a[3] && !a[4] && !a[5] && !a[6] && a[7] ||
        !a[3] && !a[4] && !a[5] && !a[6] && !a[7])) /*5. D、E、F、G、H 中至少有2人参加;*/
    if(a[2] && a[6] || !a[2] && !a[6]) /*6. C和G或者都参加,或者都不参加;*/
    if(!(!a[2] && a[4] && a[6] && a[8] ||
        a[2] && !a[4] && a[6] && a[8] ||
        a[2] && a[4] && !a[6] && a[8] ||
        a[2] && a[4] && a[6] && !a[8] ||
        a[2] && a[4] && a[6] && a[8])) /*7. C、E、G、I中至多只能2人参加;*/
    if(!a[4] || a[5] && a[6]) /*8. 如果E参加,那么F和G也都参加;*/
    if(!a[5] || !a[6] && !a[7]) /*9. 如果F参加,G、H就不能参加;*/
    if(a[8] || a[9] || a[7]) /*10. 如果I、J都不参加,H必须参加。*/
    {
        for(i = 0; i < 10; i++)
            if(a[i]) printf("%c ", 'A' + i);
        printf("\n");
    }
}

int main()
{
    int i;
    for(i = 1; i <= 0x3FF; Test(i++));
    return 0;
}

结果是
B C G H
C D G H
C D G J
B C G H J
C D G H J

重剑无锋,大巧不工
2011-06-03 22:15
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,怎么没人讨论了?我的代码有没有什么问题?哪位有不同见解?

重剑无锋,大巧不工
2011-06-03 23:40
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
收藏
得分:0 
回复 5楼 beyondyf
a[i] = (comb >> i++) & 1
我没 学过这种符号   

2011-06-03 23:59
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
按位与运算。太晚了,就不细说了,这是很基础的知识,自己找书看吧。
如果各位有兴趣知道,明天我可以讲讲算法实现。

重剑无锋,大巧不工
2011-06-04 00:10
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
收藏
得分:2 
你是把所有可能出现的人列出来判断吗(10个1)?五楼的。
感觉能用  交集 来做,代碼写出来比你长很多,想的累,写的也累。

白娘故意下雨骗许仙的伞。祝英台十八里相送时装疯卖傻调戏梁山伯。七仙女挡住了董永的去路。牛郎趁织女洗澡时拿走了她的衣服。。。这些故事告诉我们;伟大爱情的开始,总归的有一个要先耍流氓!
2011-06-04 00:57
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
收藏
得分:2 
回复 7楼 beyondyf
能给讲一下吗?
2011-06-04 09:05
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:2 
那也是c里面的啊  &这个是按位与 >>  << 分别是向左向右移位等等楼主去查查吧
2011-06-04 09:53
快速回复:A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛, ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018074 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved