1.问题:田忌赛马”是历史上有名的揭示如何善用自己的长处去对付对手的短处,从而在竞技中获胜的事例。当时田忌和齐王赛马,他们各派出N匹马(N≤2000).每场比赛,输的一方要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。每匹马的速度值是固定而且已知的,而齐王出马也不管田忌出马的顺序。请问田忌应该如何安排自己的马去对抗齐王的马,才能赢最多的钱?

2.设计思路:使用贪心算法去解决问题;如果齐王最好的马比田忌最好的马要厉害,那么让田忌最差的马和齐王的好马比较:输或者赢,都会消耗一匹齐王的好马;如果齐王的好马比不过田忌的好马,那么直接进行比较;如果是平局,就继续进行下一次的比较;直到双方的马都为0时结束;首先要对于双方的马进行排序,接下来比较按上述思路比较。

3.代码:

/*田忌赛马*/
#include <stdio.h>
#include <stdlib.h>           //调用C语言标准库进行排序
#define N 3
int tj[N]={92,83,71};
int qw[N]={95,87,74}; int compare(const void *a, const void *b)
{return *(int*)a - *(int*)b; //由小到大排序//return *(int *)b - *(int *)a; 由大到小排序
}
int main()
{qsort(tj,N,sizeof(int),compare);           //调用函数进行排序,升序 qsort(qw,N,sizeof(int),compare);      int a=0,b=0;int n=N-1,m=N-1;                    //数组下标从0开始,所以第N个元素在数组中是N-1的位置 int count=0;                          //记录赢的次数 while(a<=m){if(tj[m]>qw[n])             //田忌的好马胜过齐王的好马,赢一次 {m--;n--;count++; }else if(tj[a]>qw[b])      //田忌的劣马胜过齐王的劣马,赢一次 {a++;b++;count++;} else if(tj[a]<qw[b])  //田忌的劣马比不过齐王的劣马,用田忌的劣马消耗一匹齐王的好马 {a++;n--;count--;}else{                    //田忌的好马比不过齐王的好马,使用劣马换掉齐王的好马 if(tj[a]>qw[n])   //田忌的劣马胜过齐王的好马,赢一次{a++;n--;count++; }else if(tj[a]<qw[n]) //田忌的劣马换掉齐王的好马 {a++;n--;count--; }else{               //平局时进行下一次的比较 n--;a++;}} }printf("count=%d\n",count);printf("赢的金币数量为:%d\n",count*200);return 0;} 

4.运行结果:

贪心算法之田忌赛马问题相关推荐

  1. 田忌赛马贪心算法_贪心算法之田忌赛马

    你一定听过田忌赛马的故事吧?       如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉20 ...

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

    算法实验课回顾 田忌赛马 问题描述: 你一定听说过田忌赛马的故事吧?如果3匹马变成n匹(n<=100),齐王仍然让他的马按照优到劣的顺序初赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以 ...

  3. 田忌赛马贪心算法_田忌赛马问题——贪心算法

    关于输入 输入包含多组测试数据. 每组测试数据的第一行是一个整数n(1<=n<=1000),表示田忌和齐王都拥有n匹马.接下来一行是n个整数,表示田忌的马的速度,下一行也是n个整数,表示齐 ...

  4. 田忌赛马贪心算法_贪心算法解决田忌赛马

    田忌赛马--对策问题 教学目标: 1.通过简单的事例,使学生初步体会对策论在解决... 梁锦美有无课件 上课时间 有 12 月 15 日 1 田忌赛马中的数学问题 课时... 同学们,你听过" ...

  5. 田忌赛马贪心算法_acm田忌赛马问题在线等急求!!

    这个是问题:这里有一个非常著名的中国故事."大约2300年以前,田忌将军是齐国高级官员,他喜欢和国王还有其它的人赛马"."田忌和国王都有3匹不同档次的马,即普通的,好的, ...

  6. 55天 - 贪心算法 - 田忌赛马问题 openjudge百炼 2287

    //模板#include <iostream> #include <cstdio> #include <string> #include <algorithm ...

  7. 贪心算法 田忌赛马问题

    贪心算法 田忌赛马问题 这个题目贪心的本质在于:*田忌只在有把握赢的情况下拿出快马和王拼,否则用最慢的马比掉王的快马最大程度削弱王的战斗力 贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比. ...

  8. POJ2287 田忌赛马---贪心算法

    田忌赛马 题目详见http://poj.org/problem?id=2287 田忌赛马大家都听过,可是如果不是上中下三等马,而是很多匹马,优劣有很多种分类,就不仅仅是321的问题了. 这个很明显就是 ...

  9. 典型的贪心算法~ (田忌赛马 )

    1. 田忌赛马  典型的贪心算法~~自己木有考虑到贪心的第二步导致wa了好多次 算法分析 Problem Description: 给出2N组数据,分别表示田忌和齐威王的N匹马的速度,没进行一场比赛( ...

  10. 用c语言实现田忌赛马(贪心算法)

    用C语言实现田忌赛马(贪心算法) *首先,我们来回顾一下田忌赛马的题目. **题目描述] "田忌赛马"是历史上有名的揭示如何善用自己的长处去对付对手的短处,从而在竞技中获胜的事例. ...

最新文章

  1. expires与etag控制页面缓存的优先级
  2. 小说站 章节内容 ajax,第17章 作业分析与异步编程原理——2019年5月14日22:00
  3. “35 岁才是一个程序员成熟的开始!”
  4. 一点历史--Python
  5. Android 修改手机hosts域名 (绑定host域名 )
  6. 如何删除Cookie?
  7. HDU 4587 TWO NODES(割两个点的最大连通分支数)
  8. Python 字符串语法,for
  9. 【摘抄】其实我是间谍!
  10. python为什么叫爬虫-可以写爬虫的那么多,为什么只有python火了?
  11. 在线教育行业APP高效开发解决方案
  12. enctype=multipart/form-data 文件上传
  13. 通过反射调用方法会大大降低性能
  14. Leetcode之跳跃游戏Ⅱ
  15. 这次,华为选择了湖南大学、湘潭大学
  16. java极光推送demo_Java集成极光推送
  17. 通过建设银行外联平台进行转账/提现操作(Java)
  18. 公安大数据可视化指挥决策平台
  19. oracle 独占更新,Oracle的共享封锁 独占封锁和共享更新封锁 (3)
  20. 还原文件打开方式为未知应用程序

热门文章

  1. IE当前安全设置不允许下载该文件的解决办法
  2. AppBarLayoutCoordinatorLayoutBehavior
  3. kiv8测量方法_室内门标准及测量方法
  4. 整理 kanban 的 DoR 和 DoD
  5. cmd命令行怎样运行python,在CMD命令行中运行python脚本的方法
  6. html 隐藏广告代码,js漂浮广告原理 js或者CSS带关闭的漂浮广告代码
  7. 浅学socket及iOS中的AsyncSocket框架
  8. bzoj 3505: [Cqoi2014]数三角形 排列组合+数学
  9. 说说域名、二级域名和主机名的联系区别
  10. unity编辑器扩展篇-中文字段显示