解题思路:
记0为不去,1为去,6个for就是全部情况列举,2*2*2*2*2*2,
1)A和B两人中至少去一人; 
2)A和D不能一起去; 
3)A、E和F三人中要派两人去; 
4)B和C都去或都不去; 
5)C和D两人中去一个; 

分别对应:

a+b>=1 && a+d!=2 && a+e+f==2 && b==c && c+d==1

6)若D不去,则E也不去===if(d==0)e=0;if(d==0)e=1;

本来应该只要if(d==0)e=0这个的,但是会发现这样,for会进入死循环,因为 for(e=0; e<=1; e++)

所以要加if(d==0)e=1,这样就能跳出循环

注意事项:





参考代码:

#include<stdio.h>

int main()

{

    int a,b,c,d,e,f;

    for(a=0; a<=1; a++)

        for(b=0; b<=1; b++)

            for(c=0; c<=1; c++)

                for(d=0; d<=1; d++)

                    for(e=0; e<=1; e++)

                        for(f=0; f<=1; f++)

                        {

                            if(d==0)e=0;

                            if(a+b>=1 && a+d!=2 && a+e+f==2 && b==c && c+d==1)

                            {

                                if(a==1) printf("A,");

                                if(b==1) printf("B,");

                                if(c==1) printf("C,");

                                if(d==1) printf("D,");

                                if(e==1) printf("E,");

                                if(f==1) printf("F,");


                            }

                            if(d==0)e=1;

                        }

}


点赞(9)
 

0.0分

17 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 8 条评论

江雪沉月 2年前 回复TA
#include<stdio.h>
int main()
{
	for(int a=0;a<=1;a++)
		for(int b=0;b<=1;b++)
			for(int c=0;c<=1;c++)
				for(int d=0;d<=1;d++)
					for(int e=0;e<=1;e++)
						for(int f=0;f<=1;f++)
							{	
							if(e==1)          //这样改是不是好懂一点
								d=1;
							if((a+b)>=1&&(a+d)!=2&&(a+e+f)==2&&b==c&&(c+d)==1)
							{
							if(a==1)
								printf("A,");
							if(b==1)
								printf("B,");
							if(c==1)
								printf("C,");
							if(d==1)
								printf("D,");
							if(e==1)
								printf("E,");
							if(f==1)
								printf("F,");
						}
					}
	return 0;
}
南初 2年前 回复TA
@Langzihao. 循环嵌套容易出事
扣脚的菜鸟 3年前 回复TA
一看感觉挺简单,为什么我就是想不到呢.....?......
光仔 4年前 回复TA
通俗易懂  给你点赞
Christ 6年前 回复TA
@Langzihao. 建议不要这样写,要是代码再长一些,这样的写法无法直接表达语句逻辑关系,会给维护带来很多不必要的麻烦
Langzihao. 7年前 回复TA
@Langzihao. 嘿嘿,跟你差不多,不厉害不厉害,就是整齐而已。强迫症0.0
司机是个大坏蛋 7年前 回复TA
@Langzihao. 你的更简洁啊,厉害了
Langzihao. 7年前 回复TA
#include<stdio.h>

int main()
{
	int a,b,c,d,e,f;
	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++)
	for(f=0;f<2;f++)
	if((a+b>0) && (a+d<2) && (a+e+f==2) && (b+c==0 || b+c==2) && (c+d==1) && (d+e==0 || d==1)){
		if(a)	printf("A,");
		if(b)	printf("B,");
		if(c)	printf("C,");
		if(d)	printf("D,");
		if(e)	printf("E,");
		if(f)	printf("F,");
		break;
	}
	return 0;
}
我感觉这样看起来整齐很多呀~~当然这是我自己写的哈,跟你的很像耶,嘿嘿