关于人员派遣问题的解答

软件2班徐嘉辰20232133204 软件23 2023-11-06 22:22:51

某任务需要在A,B,C,D,E五人中物色人员去完成,但派人受限于下列条件:
1.若A去,则B去
2.D,E两人中必有人去
3.B,C中必有一人去,但只能去一人
4.C,D两个要么都去,要么都不去
5.若E去,则A,B去
问有几种派遣方式?用C语言编程来回答这个问题
输入格式:无
输出格式:以A,B,C,D,E代表没人,输出满足问题要求的所有派遣组合,每行一个派遣。
例:1 : C D
2 : A B E

#include<stdio.h>
int main()
{
    int arr[5] = { 0 };
    int a,b,c,d,e,x=1;
    for (a= 0; a < 2; a++)
    {
        arr[4] = a;
        for (b = 0; b < 2; b++)
        {
            arr[3] = b;
            for (c = 0; c< 2; c++)
            {
                arr[2] = c;
                for (d= 0; d< 2; d++)
                {
                    arr[1] = d;
                    for (e = 0; e < 2; e++)
                    {
                        arr[0] = e;
                        //这边使用了多个嵌套for循环来罗列每一个人去不去的情况
                        int flag = 0;
 
                        //条件1
                        if ((arr[0] == 1 && arr[1] == 1)||(arr[0]==0))
                        {
                            flag++;
                        }
                        //条件2
                        if (arr[3] == 1 || arr[4] == 1)
                        {
                            flag++;
                        }
                        //条件3
                        if ((arr[1] == 1 && arr[2] == 0 )|| (arr[2] == 1 && arr[1] == 0 ))
                        {
                            flag++;
                        }
                        //条件4
                        if ((arr[2] == 1 && arr[3] == 1 )|| (arr[2] == 0 && arr[3] == 0))
                        {
                            flag++;
                        }
                        //条件5
                        if (arr[4] == 1 )
                        {
                            if(arr[0] == 1&& arr[1] == 1){
                                flag++;
                            }
                        }else flag++;
                        if (flag == 5)//满足以上全部条件
                        {
                            printf("%d :",x);
                            x=x+1;
                            for (int i = 0; i < 5; i++)
                            {
                                if (arr[i] == 1)
                                {
                                    if (i == 0)
                                        printf(" A");
                                }
                                if (arr[i] == 1)
                                {
                                    if (i == 1)
                                        printf(" B");
                                }
                                if (arr[i] == 1)
                                {
                                    if (i == 2)
                                        printf(" C");
                                }
                                if (arr[i] == 1)
                                {
                                    if (i == 3)
                                        printf(" D");
                                }
                                if (arr[i] == 1)
                                {
                                    if (i == 4)
                                        printf(" E");
                                }
                            }printf("\n");
                        }
                    }
                }
            }
        }
    }
}

本题中运用了逻辑运算的思想;

通过数组的帮助实现找出满足条件的方法,我不知道会不会高效,但是还挺好理解。

...全文
119 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
张老师 2023-11-16
  • 打赏
  • 举报
回复

这题还可以多考虑一下如何优化代码哦

211

社区成员

发帖
与我相关
我的任务
社区描述
程序设计基础课程教学群
c语言c++ 高校 福建省·厦门市
社区管理员
  • xmzq001
  • 鹿饮涧鸣
  • jiangxiaoju
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

请加入学习社区的软件23级同学修改社区昵称为学号+姓名,以便登记作业提交情况。

试试用AI创作助手写篇文章吧