注册 登录
编程论坛 C语言论坛

c语言问题,请帮帮我javascript:insertText('06','em');

kuuhaku 发布于 2021-11-18 21:54, 1297 次点击
A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。

穷举法 假设0表示不参加 ,1表示参加
将每一种情况都用代码表示出来
for循环、if语句、逻辑运算符、continue
3 回复
#2
rjsp2021-11-19 08:26
(2)B和C只有一个人参加;

是“且只有一个人参加”
还是“至多只有一个人参加”
#3
rjsp2021-11-19 11:21
程序代码:
#include <stdio.h>
#include <stdbool.h>

int main( void )
{
    // 总共就32种情况,那穷举最合算
    for( unsigned i=0; i!=1u<<5; ++i )
    {
        bool a = i&(1u<<0);
        bool b = i&(1u<<1);
        bool c = i&(1u<<2);
        bool d = i&(1u<<3);
        bool e = i&(1u<<4);

        // 以下条件随便写,只要符合题意就行
        if( a && !b )     // (1)A参加时,B也参加
            continue;
        if( b+c != 1 )    // (2)B和C只有一个人参加;------ 补成“有且只有一个人参加”
            continue;
        if( c != d )      // (3)C和D或者都参加,或者都不参加;
            continue;
        if( !d && !e )    //(4)D和E中至少有一个人参加;
            continue;
        if( e && !(a&&d) ) // (5)如果E参加,那么A和D也都参加。
            continue;

        printf( "%u%u%u%u%u\n", a, b, c, d, e ); // 00110
    }
}
#4
kuuhaku2021-11-20 09:15
回复 2楼 rjsp
这个我也不知道
1