L2-2 人员派遣问题

软件2314张侃202221512027 软件23 2023-11-09 15:54:10

题目要求:

 思路讲解:

基本准则枚举;假设某人去了则使某人等于1,不去则=0(若A去则A=1不去则A=0)。

将题目思路转换为数据表达:

(1)若A去,则B跟去:

三种情况:

1.A去B也去   A=1,B=1,A+B==2

2.A不去B去   A=0,B=1,A+B==1

3.AB都不去   A=0,B=0,A+B==0

综上:A-B != 0

(2)D、E两人中必有人去:

三种情况:

1.DE都去   D=1,E=1,D+E==2

2.D去E不去   D=1,E=0,D+E==1

3.D不去E去   D=0,E=1,D+E==1

综上:D+E != 1

(3)B、C两人中必有人去,但只去一人:

两种情况:

1.B去E不去   B=1,E=0,B+C==1

2.B不去E去   B=0,E=1,B+E==1

综上:B+E == 1

(4)C、D两个要么都去要么都不去:

两种情况:

1.CD都去   C=1,D=1,C+D==2

2.CD都不去   C=0,D=0,C+D==0

综上:D+C == 0 或 D+C == 2

(5)若E去,则A、B都去:

两种情况:

1.E、A、B都去   E=1,A=1,B=1,E+A+B==3

2.E不去,AB随意:E=0

综上:E+A+B ==3 或 E==0

若同时满足上述所有条件则说明方案可行

代码:

#include <stdio.h>
int main()
{
	int a,b,c,d,e;
	int cnt=0;
	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)!=1) && ((d+e)!=0) && (b+c==1) && ((c+d==0)|| c+d==2) && ( (e+a+b==3)|| (e==0) ) ){
							printf("%d :",++cnt); //输出方案序号
							if (a) printf(" A");  //    若a==1则输出A
							if (b) printf(" B");
							if (c) printf(" C");
							if (d) printf(" D");
							if (e) printf(" E");
							printf("\n");
						} 
					}
				}
			}
		}
	}
	return 0;
}

此方法运用到的知识较少相对来说比较方便理解

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

可以加上解题的思路分析、问题总结等

212

社区成员

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

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

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