当前位置: 首页 > 编程日记 > 正文

田忌赛马贪心算法_田忌赛马 贪心算法

算法实验课回顾

田忌赛马

问题描述:

你一定听说过田忌赛马的故事吧?如果3匹马变成n匹(n<=100),齐王仍然让他的马按照优到劣的顺序初赛,田忌可以按任意顺序选择他的赛马出赛。赢一局,田忌可以得到200两银子;输一局,田忌就要输掉200两银子。已知道国王和田忌的所有马的奔跑速度,并且所有马的奔跑速度均不相同,现已经对两人的马分别从快到慢排好序。请设计一个算法,帮助田忌赢得最多的银子。

要求:

输入:第一行一个整数n,表示双方各有n匹马;

第二行n个整数分别表示田忌的n匹马的速度;

第三行n个整数分别表示齐王的n匹马的速度。

输出:若通过聪明的你精心安排,如果能赢得比赛(赢的次数大于比赛总次数的一半),那么输出“YES”。 否则输出“NO”。并输出一个整数,代表田忌最多能赢多少两黄金。

如果田忌最快的马比齐王最快的马快,则比之

如果田忌最快的马比齐王最快的马慢,则用田最慢的马跟齐最快的马比

// 这是贪心的第一步

如果田忌最快的马的速度与齐威王最快的马速度相等

如果田忌最慢的比齐威王最慢的快,则比之

// 这是贪心的第二步

如果田忌最慢的比齐威王最慢的慢,田忌慢VS齐王快

田忌最慢的与齐威王最慢的相等,田忌慢VS齐王快

代码 C++实现

#include

#include

using namespace std;

// 快排

void Quick(int a[], int begin, int end) {

if (begin >= end)

return;

int t = a[begin];

int i = begin;

int j = end;

while (i < j)

{

while (i

j--;

a[i] = a[j];

while (i < j && a[i] >= t)

i++;

a[j] = a[i];

}

a[i] = t;

Quick(a, begin, i - 1);

Quick(a, i + 1, end);

}

// 田忌赛马算法

int tianRac(int Tian[], int King[], int n) {

int money = 0; // 田忌赢的钱

int tianh = 0, tiane = n-1, kingh = 0, kinge = n-1;// 分别标记田忌马队和齐王马队的最快和最慢的马

// 共有 n 次比赛,每进行一次,就换下一匹马(田姥爷就位,开始赛马秀)

for (int i = 0; i < n; i++) {

// 田忌快马比齐王快马快时,那就和他一较高下(赌怪,必赢)

if (Tian[tianh] > King[kingh]) {

money += 200;

tianh++;// 下一个

kingh++;// 下一个

}

// 田忌快马比齐王快马慢时,用最慢的马跟他最快的比(埋伏他一手,这匹马不用抢,他死定了,反手一个超级加倍,闷声发大财)

else if (Tian[tianh] < King[kingh]) {

money -= 200;

tiane--;

kingh++;

}

// 田忌的快马和齐王的快马一样快时(他也一样快?不过不用怕,他的马赢不了我)

else {

// 田忌的慢马比齐王的慢马快时(很牛逼这个马)

if (Tian[tiane] > King[kinge]) {

money += 200;

tiane--;

kinge--;

}

// 田忌的慢马比齐王的慢马一样快和慢时,就用慢马和他快马比(如果将这个慢马换成快马我的马将绝杀,可惜换不得)

else {

money -= 200;

tiane--;

kingh++;

}

}

}

// 返回田忌赢的钱(飞机~)

return money;

}

int main() {

int n;// 比赛双方马的数量

cout << "公等马几何" << endl;

cin >> n;

int* Tian = new int[n];

int* King = new int[n];

cout << "将军 马之疾" << endl;

for (int i = 0; i < n; i++) {

cin >> *(Tian + i);

}

cout << "王 马之疾" << endl;

for (int i = 0; i < n; i++){

cin >> *(King + i);

}

// 排序,降序排

Quick(Tian, 0, n-1);

Quick(King, 0, n - 1);

// 调用“就算佛祖来了,田姥爷也难输”算法

int result = tianRac(Tian, King, n);

if (result > 0) {

cout << "将军 胜" << endl;

cout << "赢 " << result << "金" << endl;

}

else if (result == 0)

{

cout << "和" << endl;

}

else {

cout << "王 胜" << endl;

cout << "赢 " << -result << "金" << endl;

}

return 0;

}

测试数据:

95 92 80 85 98 86 81 83

88 89 97 99 82 85 90 91

80 79 90 95 78 85 68 91

95 92 99 85 98 86 85 96

结果截图:

909dbdad12a267bd49566abf6baadca7.png

a5721c35fa6f18eb6cbff6723537bccc.png

ps: 这个算法对田姥爷太难输了…

内容来源于网络如有侵权请私信删除

相关文章:

[转][小结][三种方法]实现WPF不规则窗体

实现WPF不规则窗体的三种常用的方法如下&#xff1a; 1.使用Blend等工具绘制一个不规则xaml&#xff0c;然后作为窗体的背景。这个可以参考xiaowei0705的这篇博文&#xff1a;WPF制作不规则的窗体 。 2.给window的Clip属性赋Path值。这个可以参考DebugLZQ前面的博文&#xff1a…

VirtualBox虚拟机网络连接设置的四种方式

这里我先给大家大致讲解下VBox的网络配置及应用。 VirtualBox的提供了四种网络接入模式&#xff0c;它们分别是&#xff1a;1、NAT 网络地址转换模式(NAT,Network Address Translation)2、Bridged Adapter 桥接模式3、Internal 内部网络模式4、Host-only Adapter 主机…

redis-deskmanager 连不上 虚拟机 - centos redis

1、没设置redis密码 &#xff1a; https://blog.csdn.net/HUXU981598436/article/details/54668779 2、关闭防火墙 转载于:https://www.cnblogs.com/Jomini/p/9650650.html

数据库1.0 -- 数据库的基本操作

安装数据库 安装数据库的时候我们需要安装三个软件&#xff0c;使用下面的命令&#xff0c;可能还会出现一些问题&#xff0c;关于数据库的安装&#xff0c;大家可以上网自行百度 yum install mysql yum install mysql-server yum install mysql-devel 我个人的理解大概是这…

12,缓冲运动。匀速运动停止条件

缓冲运动&#xff1a;iSpeed(iTarget-oDiv.offsetLeft)/7;速度离目标点越远&#xff0c;速度越大&#xff0c;离目标点越近速度越小&#xff1b; 只支持1px是最小单位&#xff0c;没有0.5px。所以当iSpeed为小数时如&#xff08;0.7&#xff09;&#xff0c;oDiv.style.LeftoDi…

如何配置mac的mysql环境_mac安装mysql数据库及配置环境变量

安装mysql下载mysql。我下载的是&#xff1a;mysql-8.0.11-macos10.13-x86_64.dmg双击打开mysql-8.0.11-macos10.13-x86_64.dmg&#xff0c;然后双击mysql-8.0.11-macos10.13-x86_64.pkg一路点击继续&#xff0c;傻瓜式安装&#xff0c;没什么好说的此处选择“Use Legacy Passw…

三层交换机vlan间访问(第一种方式)

真的是原创&#xff0c;但是得感谢Ys_routesim软件的制作方。我将命令调试后并进行了解释。若是属于侵权&#xff0c;请立即告知我。不过学习了网工后&#xff0c;大段解读源代码不属于侵权吧。呵呵。 交换机的三层交换实际是具有路由功能的交换机&#xff0c;比如思科的Cisco …

(转载)深入浅出设计模式——桥接模式(Bridge Pattern)

模式动机设想如果要绘制矩形、圆形、椭圆、正方形&#xff0c;我们至少需要4个形状类&#xff0c;但是如果绘制的图形需要具有不同的颜色&#xff0c;如红色、绿色、蓝色等&#xff0c;此时至少有如下两种设计方案&#xff1a; 第一种设计方案是为每一种形状都提供一套各种颜色…

数据库2.0 -- 数据类型和数据表的基本操作

mysql支持多种数据类型&#xff0c;一般可以分为&#xff0c;数值&#xff0c;日期时间和字符&#xff08;串&#xff09; 数值类型 日期和时间类型 字符串类型 创建数据表 我们首先应该明白的就是一个结构的问题&#xff0c;一个用户可以管理多个数据库&#xff0c;每个数据…

virtual hust 2013.6.20 数论基础题目 D - Just the Facts

题目&#xff1a;Just the Facts 思路&#xff1a;枚举10000素数内&#xff0c;各因子出现的次数&#xff0c;然后取模为10。因为0是由2和5构成的&#xff0c;所以2和5的幂单独讨论&#xff0c;同时由于2的幂肯定大于5的&#xff0c;所以我们最后要算的再乘上2的减去后的幂就可…

MySQL中字段约束有哪些_mysql字段约束

为了确保数据的完整性和唯⼀性&#xff0c;关系型数 据库通过约束机制来实现目。一. unique 唯一性约束值不可重复&#xff1b;二. not null 非空约束值不可为空&#xff1b;三. default 默认值约束当增加数据时没有插⼊值时&#xff0c;会自动插⼊默认值&#xff1b;四. chec…

关于软件测试中那点小事中的大道理

如果想让测试在公司的项目中发挥出它最大的价值&#xff0c;并不是招两个测试技术高手&#xff0c;或引入几个测试技术&#xff0c;而是测试技术对项目流 程的渗透&#xff0c;以及测试流程的改进与完善。虽然&#xff0c;当然测试行业前景乐观&#xff0c;许多中小企业也都在引…

每日一题 -- 11-1

一天十题选择&#xff0c;一天一道编程&#xff0c;一天一个面试题&#xff0c;一个一个剑指offer 排序是必须要掌握的一个算法&#xff0c;非常的重要 题目描述 有 n 个学生站成一排&#xff0c;每个学生有一个能力值&#xff0c;牛牛想从这 n 个学生中按照顺序选取 k 名学…

Java中? extends T和? super T的理解

? 通配符类型 - <? extends T> 表示类型的上界&#xff0c;表示参数化类型的可能是T 或是 T的子类; <? super T> 表示类型下界&#xff08;Java Core中叫超类型限定&#xff09;&#xff0c;表示参数化类型是此类型的超类型&#xff08;父类型&#xff09;&…

学习Modern UI for WPF

这两天断断续续的学了学Modern UI for WPF 没啥学习笔记呵呵&#xff0c;来自大牛王春明的博客园 http://www.cnblogs.com/wangchunming/category/342887.html 此大牛学习范围之广 成果之丰富 着实是学习的典范转载于:https://www.cnblogs.com/DragonX/p/3146818.html

idea的tomcat配置文件在哪里修改_MyBatis配置文件详解

MyBatis 的配置文件包含了会影响 MyBatis 行为的设置和属性信息&#xff0c;决定了mybatis的运行轨迹&#xff0c;能充分了解这些配置的以及配置所带来的的影响&#xff0c;你就是大神&#xff01;配置文件的根节点是configuration&#xff0c;他的子孙节点有&#xff1a;prope…

《几何与代数导引》例1.4——定比分点

点$r$分有向线段$\vec{pq}$成定比$k$,即$\vec{pr}k\vec{rq}(k\neq-1)$.在仿射标架中&#xff0c;已知$p(a_1,a_2,a_3)$,$q(b_1,b_2,b_3)$和$k$,求$r(c_1,c_2,c_3)$解:由于$c_i-a_ik(b_i-c_i)$,因此$c_i\frac{kb_ia_i}{1k}$.转载于:https://www.cnblogs.com/yeluqing/archive/20…

C#第一个程序Helloworld

转载于:https://www.cnblogs.com/gzhbk/p/9656149.html

Leanote

https://github.com/leanote/leanote/wiki/Leanote-%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B—-Mac-and-Linux 安装的网址 我们相当于是在本地建立了一个服务器&#xff0c;然后将我们的leanote部署上去了 我们这里的启…

微软安全新闻聚焦-双周刊第三十四期

Biweekly Spotlights 2013. 6. 5– 2013. 6. 20 第 34 期 微软发布 EMET 4.0 2013年6月17日 Enhanced Mitigation Experience Toolkit(EMET) 是微软提供的一个免费的攻击防御工具&#xff0c;它依托 Windows 系统本身的防御机制来阻止攻击者对各类…

mysql如何实现实时存储_OpenResty + Mysql 实现日志实时存储

应用场景和日志文件解析本配置主要解决 Nginx 向 MySQL 中实时插入日志的问题&#xff0c;采用 OpenResty Mysql 实现。1. 刚开始的时候看了 Nginx 和 MySQL 的连接模块。比如说 nginx-mysql-module&#xff0c;可以连接 MySQL。但是插入日志时遇到问题&#xff0c;我们知道 n…

简易RS232 建模二 (接收)

//clK系统时钟为50MHZ 先发低位后发高位 先接收地位后接收高位module uart_tx (input clk,rst_n, UART_CTS, output reg UART_RTS, input UART_RXD, output reg UART_TXD, output [7:0] led);reg [3:0]state;reg [30:0] count;reg [7:0] data;assign led rx_data; reg [7:0] …

《UNIX高级环境编程》 -- apue.h

在看《UNIX高级环境编程》这本书的时候&#xff0c;会遇到一个问题就是这个”apue.h”,这个是作者为了编写代码方便封装了一个库&#xff0c;我们可以使用下面的方式解决这个问题&#xff0c;让我们的代码可以像作者一样去使用&#xff0c;这样的话&#xff0c;我们就可以好好研…

mysql 多少个数据库_mysql数据库的几个基本概念

1、表数据库表是一系列二维数组的集合&#xff0c;用来存储数据和操作数据的逻辑结构。行是记录&#xff0c;列是字段&#xff0c;每一列表示记录的一个属性&#xff0c;都有相应的描述信息。2、数据类型&#xff1a;数据类型决定了数据在计算机中的存储格式&#xff0c;代表不…

教孩子正确对待分数

期末考试各科成绩渐渐公布了&#xff0c;小丽迫不及待地跑到办公室向老师打听分数。看到自己那一科成绩好时欣喜若狂&#xff0c;看到差的则懊悔不已。如果你的孩子也象小丽一样视考分为命根&#xff0c;该如何教孩子正确对待分数?让她从考分的困惑中解放出来?●考前给孩子制…

canvas初尝试

最近学习了canvas&#xff0c;就拿它做了这么个小东西&#xff0c;感觉已经爱上canvas了。上代码 /* * auhor : 开发部-前端组-李鑫超 * property { tableData : {Array} 表格数据 add v-1.0.0 } * property { columData : {Array} 表头数据 add v-1.0.0 } * property { me…

模板1.0 -- 模板基本原理

为什么需要模板 我们经常有这样的一种使用的情形&#xff0c;就是我们可能需要设计一个函数&#xff0c;然后函数的参数可能是整形的&#xff0c;也可能是浮点型的&#xff0c;还有可能是其他的类型的&#xff0c;这个时候如果对于每一个类型都写一个函数&#xff0c;未免有点…

[置顶] 我的GB28181标准开发里程碑——基于eXosip的IPC端与SPVMN注册成功

昨天编译搭建好eXosip的开发环境后&#xff0c;今天完成了SIP注册功能&#xff0c;里程碑一战啊&#xff01;加油加油&#xff0c;成功就在眼前&#xff01; 今天基于eXosip做了一个IPC客户端&#xff0c;成功与公安部的SPVMN视频监控联网调测软件自测工具进行注册交互&#xf…

mysql如何避免特殊字符查询_如何避免MySQL中的特殊字符?

慕的地10843我已经用Java开发了自己的MySQL转义方法(如果对任何人都有用的话)。请参阅下面的类代码。警告&#xff1a;如果启用了任何_反斜杠_转义SQL模式&#xff0c;则出错。private static final HashMap sqlTokens;private static Pattern sqlTokenPattern;static{ …

visio 2010 修改 默认字体 字号大小 方法

哈哈&#xff0c;我这是标题党&#xff0c;先给大家泼个冷水。Visio2010 并不支持对一次性地修改绘图中所有图形的字体大小&#xff01;但可以有一个比较笨的方法解决。1.新建一个模具2.将常用的图形放到这个模具中3.对每个图形进行编辑4.对这个形状的字体&#xff0c;字号进行…