博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
枚举题——四大明湖排序(本菜优化了一下)
阅读量:5330 次
发布时间:2019-06-14

本文共 4730 字,大约阅读时间需要 15 分钟。

上题:

A:洞庭最大,洪泽最小,鄱阳第三

B:洪泽最大,洞庭最小,鄱阳第二,太湖第三
C:洪泽最小,洞庭第三
D:鄱阳最大,太湖最小,洪泽第二,洞庭第三

 

分析:

(1)

用a,b,c,d分别表示四个湖的排序。A表示洞庭,b表示洪泽,c表示鄱阳,d表示太湖。

A学生的回答可表示为:a==1 && b==4 && c==3
B学生的回答可表示为:a==4 && b==1 && c==2 && d==3
C学生的回答可表示为:a==3 && b==4
D学生的回答可表示为:a==3 && b==2 && c==1 && d==4
(2)

由于每位学生都只说对了一个,因此每位同学的若干个关系表达式中只有一个为真,其余都为假。因此,

对A同学:((a==1) + ( b==4) + ( c==3)) == 1
对B同学:((a==4) + ( b==1) + ( c==2) + ( d==3)) == 1
对C同学:((a==3) + ( b==4)) == 1
对D同学:((a==3) + ( b==2) + ( c==1) + (d==4)) == 1
本题的答案就是找同时满足上面四个条件的答案

------------------------------------------------------------------------------------------------

方法一(传统的枚举方法)

1 # include
2 # include
3 int main() 4 { 5 int dongting; 6 int hongze; 7 int boyang; 8 int tai; 9 int A;10 int B;11 int C;12 int D;13 for(dongting=1; dongting<5; dongting++)14 {15 for(hongze=1; hongze<5; hongze++)16 {17 for(boyang=1; boyang<5; boyang++)18 {19 for(tai=1; tai<5; tai++)20 {21 //todo22 A= ( (dongting==4) + (hongze==1) + (boyang==3) );23 B= ( (hongze==4) + (dongting==1) + (boyang==2) + (tai==3));24 C= ( (hongze==1) + (dongting==3));25 D= ( (boyang==4) + (tai==1) + (hongze==2) + (dongting==3));26 if( (A==1) && (B==1) && (C==1) && (D==1) )27 {28 if(dongting!=tai&&dongting!=hongze&&dongting!=boyang&&tai!=hongze&&tai!=boyang&&hongze!=boyang)29 {30 printf("dongting=%d\n",dongting);31 printf("hongze=%d\n",hongze);32 printf("tai=%d\n",tai);33 printf("boyang=%d\n",boyang);34 }35 }36 }37 }38 }39 }40 41 return 0;42 }
View Code

方法二(优化了一下)

1 # include
2 using namespace std; 3 int main() 4 { 5 int a, b, c, d; 6 for (a=1; a<=4; ++a) 7 for (b=1; b<=4; ++b) 8 if ( a == b) 9 continue;10 else11 for (c=1; c<=4; ++c)12 if (c==a||c==b)13 continue;14 else15 {16 d=10-a-b-c;17 if (((a==1)+(b==4)+(c==3))==118 &&((b==1)+(a==4)+(c==2)+(d==3))==119 &&((b==4)+(a==3))==120 &&((c==1)+(d==4)+(b==2)+(a==3))==1)21 cout << a << b << c << d;22 }23 }
View Code

 

方法三(再优化了一下)

 

1 # include
2 using namespace std; 3 int main() 4 { 5 int a, b, c, d; 6 bool flag = false; 7 for (a=1; a<=4; ++a) 8 { 9 for (b=1; b<=4; ++b)10 {11 if ( a == b) continue;12 else for (c=1; c<=4; ++c)13 if (c==a||c==b) continue;14 else15 {16 d=10-a-b-c;17 if (((a==1)+(b==4)+(c==3))==118 &&((b==1)+(a==4)+(c==2)+(d==3))==119 &&((b==4)+(a==3))==120 &&((c==1)+(d==4)+(b==2)+(a==3))==1)21 {22 cout << a << b << c << d;23 flag = true;24 break;25 }26 }27 if (flag) break;28 }29 if (flag) break;30 }31 }
View Code

 

 

 

方法四(再优化了一下)

 

1 # include
2 using namespace std; 3 int main() 4 { 5 int a, b, c, d; 6 bool flag = false; 7 for (a=1; a<=4 && !flag; ++a) 8 { 9 for (b=1; b<=4 && !flag; ++b)10 {11 if ( a == b) continue;12 else for (c=1; c<=4 ; ++c)13 if (c==a||c==b) continue;14 else15 {16 d=10-a-b-c;17 if (((a==1)+(b==4)+(c==3))==118 &&((b==1)+(a==4)+(c==2)+(d==3))==119 &&((b==4)+(a==3))==120 &&((c==1)+(d==4)+(b==2)+(a==3))==1)21 {22 cout << a << b << c << d;23 flag = true;24 break;25 }26 }27 }28 }29 }
View Code

 

 

 

 

转载于:https://www.cnblogs.com/sxmcACM/p/3415284.html

你可能感兴趣的文章
Django之Models
查看>>
CSS 透明度级别 及 背景透明
查看>>
Linux 的 date 日期的使用
查看>>
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(5):室内装修 转:http://blog.csdn.net/tcjiaan/article/details/7269014
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
jQuery上传插件Uploadify 3.2在.NET下的详细例子
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
正则表达式的用法
查看>>
线程安全问题
查看>>
SSM集成activiti6.0错误集锦(一)
查看>>
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>