枚举题——四大明湖排序(本菜优化了一下)
上题:
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<stdio.h> 2 # include<iostream> 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 //todo 22 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<iostream> 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 else 11 for (c=1; c<=4; ++c) 12 if (c==a||c==b) 13 continue; 14 else 15 { 16 d=10-a-b-c; 17 if (((a==1)+(b==4)+(c==3))==1 18 &&((b==1)+(a==4)+(c==2)+(d==3))==1 19 &&((b==4)+(a==3))==1 20 &&((c==1)+(d==4)+(b==2)+(a==3))==1) 21 cout << a << b << c << d; 22 } 23 }
View Code
方法三(再优化了一下)
1 # include<iostream> 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 else 15 { 16 d=10-a-b-c; 17 if (((a==1)+(b==4)+(c==3))==1 18 &&((b==1)+(a==4)+(c==2)+(d==3))==1 19 &&((b==4)+(a==3))==1 20 &&((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<iostream> 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 else 15 { 16 d=10-a-b-c; 17 if (((a==1)+(b==4)+(c==3))==1 18 &&((b==1)+(a==4)+(c==2)+(d==3))==1 19 &&((b==4)+(a==3))==1 20 &&((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
枚举题——四大明湖排序(本菜优化了一下)相关推荐
- 算法刷题重温(九): 排序算法来啦
1. 写在前面 这篇文章复习排序算法, 排序算法的重要性也是不言而喻, 并且面试的时候经常会问到第K大,第K小,前K大,前K小的问题, 这往往都是排序算法的解决范畴. 在实际问题中,排序算法也是应用非 ...
- 图解选择排序算法及优化
作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...
- 2021年全国研究生数学建模竞赛华为杯D题抗乳腺癌候选药物的优化建模求解全过程文档及程序
2021年全国研究生数学建模竞赛华为杯 D题 抗乳腺癌候选药物的优化建模 原题再现: 一.背景介绍 乳腺癌是目前世界上最常见,致死率较高的癌症之一.乳腺癌的发展与雌激素受体密切相关,有研究发现 ...
- 《LeetCode力扣练习》第33题 搜索旋转排序数组 Java
<LeetCode力扣练习>第33题 搜索旋转排序数组 Java 一.资源 题目: 整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下 ...
- 牛客题霸 [ 未排序数组中累加和为给定值的最长子数组长度] C++题解/答案
牛客题霸 [ 未排序数组中累加和为给定值的最长子数组长度] C++题解/答案 题目描述 给定一个无序数组arr, 其中元素可正.可负.可0.给定一个整数k,求arr所有子数组中累加和为k的最长子数组长 ...
- 清华机试真题:成绩排序
清华大学机试真题:成绩排序 题目描述 输入描述: 输出描述: 示例1 代码块 题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前 ...
- 暴力枚举题:平面上的点与外心
暴力枚举题:平面上的点与外心 问题: 思路: 首先,外心是唯一的,我们需要枚举外心,若有点在圆上,则这些点到该外心的距离相等.因此我们需求出外心到所有点的距离,接下来是一个组合问题,如果外心到x个点的 ...
- 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码
相关信息 (1)建模思路 [2023 年第十三届 MathorCup 高校数学建模挑战赛]A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 [2023 年第十三届 Matho ...
- 2020年第十七届数模竞赛F题 飞行器质心平衡供油策略优化 建模【分享交流】
飞行器质心平衡供油策略优化 导航不迷路 2020研究生华为杯数学建模比赛题目 题目A:芯片相噪算法 题目B:汽油辛烷值建模 题目C:面向康复工程的脑信号分析和判别建模 题目D:无人机集群协同对抗 题目 ...
- 【每日一题】-金牌榜排序
文章目录 题目描述 输入 输出 样例 解析 代码 题目描述 2012伦敦奥运会即将到来,大家都非常关注奖牌榜的情况,现在我们假设奖牌榜的排名规则如下: 1.首先gold medal 数量多的排在前面: ...
最新文章
- 【机器学习入门到精通系列】插值与拟合
- C++编写DLL的方法
- C# 转繁体转简体转拼音,超级文本大转换
- Notepad++中Windows,Unix,Mac三种格式之间的转换(换行符的转换)
- vs2019配置OpenGL
- 深度揭秘阿里云 Serverless Kubernetes
- 【Java】Exception in thread main java.lang.Error: Unresolved compilation problem
- 五分钟看懂快速幂算法
- php中好看的对话框面板,有关对话框的课程推荐10篇
- dependency 和dependencyManagement 的区别
- php有没有ispostback,php用什么表示IsPostBack?
- Tcp ip 网络编程入门(一)
- 学习andriod开发之 自己开发短信发送软件
- 密码学归约证明——基于伪随机函数的消息鉴别码方案
- WebAssembly 学习笔记
- JavaScript中的表单编程
- ABBYY FlexiCapture Engine 10.0:创建模板识别的新工具
- 【燃料电池】基于simulink的燃料电池系统控制策略仿真
- TPLINK WR941N V2_090803 路由器 后门
- python实现不死兔,递归法。
热门文章
- linux从服务器获取共享列表失败,linux – 如何获取连接到本地网络中NFS服务器的客户端列表?...
- JAVA开源协同过滤算法_基于用户的协同过滤推荐算法
- [codeup 2031]To Fill or Not to Fill
- C/C++[PAT B level 1004,1012]
- 算法:逆序局部链表 Reverse Linked List II
- 2021-09-09316. 去除重复字母 栈
- 不使用任何判断比较两个整数
- eclipse mysql tomcat,java+eclipse+tomcat+mysql+jdbc
- archlinux mysql_在Arch Linux中安装MySQL
- 目前最常用的计算机机箱类型为_2016年秋计算机基础理论题 答案解析