上题:

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. 算法刷题重温(九): 排序算法来啦

    1. 写在前面 这篇文章复习排序算法, 排序算法的重要性也是不言而喻, 并且面试的时候经常会问到第K大,第K小,前K大,前K小的问题, 这往往都是排序算法的解决范畴. 在实际问题中,排序算法也是应用非 ...

  2. 图解选择排序算法及优化

    作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...

  3. 2021年全国研究生数学建模竞赛华为杯D题抗乳腺癌候选药物的优化建模求解全过程文档及程序

    2021年全国研究生数学建模竞赛华为杯 D题 抗乳腺癌候选药物的优化建模 原题再现:   一.背景介绍   乳腺癌是目前世界上最常见,致死率较高的癌症之一.乳腺癌的发展与雌激素受体密切相关,有研究发现 ...

  4. 《LeetCode力扣练习》第33题 搜索旋转排序数组 Java

    <LeetCode力扣练习>第33题 搜索旋转排序数组 Java 一.资源 题目: 整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下 ...

  5. 牛客题霸 [ 未排序数组中累加和为给定值的最长子数组长度] C++题解/答案

    牛客题霸 [ 未排序数组中累加和为给定值的最长子数组长度] C++题解/答案 题目描述 给定一个无序数组arr, 其中元素可正.可负.可0.给定一个整数k,求arr所有子数组中累加和为k的最长子数组长 ...

  6. 清华机试真题:成绩排序

    清华大学机试真题:成绩排序 题目描述 输入描述: 输出描述: 示例1 代码块 题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前 ...

  7. 暴力枚举题:平面上的点与外心

    暴力枚举题:平面上的点与外心 问题: 思路: 首先,外心是唯一的,我们需要枚举外心,若有点在圆上,则这些点到该外心的距离相等.因此我们需求出外心到所有点的距离,接下来是一个组合问题,如果外心到x个点的 ...

  8. 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码

    相关信息 (1)建模思路 [2023 年第十三届 MathorCup 高校数学建模挑战赛]A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 [2023 年第十三届 Matho ...

  9. 2020年第十七届数模竞赛F题 飞行器质心平衡供油策略优化 建模【分享交流】

    飞行器质心平衡供油策略优化 导航不迷路 2020研究生华为杯数学建模比赛题目 题目A:芯片相噪算法 题目B:汽油辛烷值建模 题目C:面向康复工程的脑信号分析和判别建模 题目D:无人机集群协同对抗 题目 ...

  10. 【每日一题】-金牌榜排序

    文章目录 题目描述 输入 输出 样例 解析 代码 题目描述 2012伦敦奥运会即将到来,大家都非常关注奖牌榜的情况,现在我们假设奖牌榜的排名规则如下: 1.首先gold medal 数量多的排在前面: ...

最新文章

  1. 【机器学习入门到精通系列】插值与拟合
  2. C++编写DLL的方法
  3. C# 转繁体转简体转拼音,超级文本大转换
  4. Notepad++中Windows,Unix,Mac三种格式之间的转换(换行符的转换)
  5. vs2019配置OpenGL
  6. 深度揭秘阿里云 Serverless Kubernetes
  7. 【Java】Exception in thread main java.lang.Error: Unresolved compilation problem
  8. 五分钟看懂快速幂算法
  9. php中好看的对话框面板,有关对话框的课程推荐10篇
  10. dependency 和dependencyManagement 的区别
  11. php有没有ispostback,php用什么表示IsPostBack?
  12. Tcp ip 网络编程入门(一)
  13. 学习andriod开发之 自己开发短信发送软件
  14. 密码学归约证明——基于伪随机函数的消息鉴别码方案
  15. WebAssembly 学习笔记
  16. JavaScript中的表单编程
  17. ABBYY FlexiCapture Engine 10.0:创建模板识别的新工具
  18. 【燃料电池】基于simulink的燃料电池系统控制策略仿真
  19. TPLINK WR941N V2_090803 路由器 后门
  20. python实现不死兔,递归法。

热门文章

  1. linux从服务器获取共享列表失败,linux – 如何获取连接到本地网络中NFS服务器的客户端列表?...
  2. JAVA开源协同过滤算法_基于用户的协同过滤推荐算法
  3. [codeup 2031]To Fill or Not to Fill
  4. C/C++[PAT B level 1004,1012]
  5. 算法:逆序局部链表 Reverse Linked List II
  6. 2021-09-09316. 去除重复字母 栈
  7. 不使用任何判断比较两个整数
  8. eclipse mysql tomcat,java+eclipse+tomcat+mysql+jdbc
  9. archlinux mysql_在Arch Linux中安装MySQL
  10. 目前最常用的计算机机箱类型为_2016年秋计算机基础理论题 答案解析