【蓝桥杯刷题】—— 盗版Huybery系列之手抓饼赛马
前言:
盗版Huybery系列之手抓饼赛马题目
解题思路的分享
题目源码的分享
本菜鸡&总结
博客昵称:陈大大陈
座右铭:所谓觉悟,就是在漆黑的荒野上开辟出一条理当前进的光明大道。
博主简介:一名热爱C/C++和算法等技术,喜欢运动,爱胡思乱想却胸怀大志的小博主!
博主&唠嗑:早中晚安!各位CSDN的朋友!我是博客新人陈大大陈,希望我的文章能为你带来帮助!欢迎大家在评论区畅所欲言!也希望大家多多为我提出您宝贵的建议!如果觉得我写的不错的话还请点个赞和关注哦~
大伙们好!又到了小陈蓝桥杯每日一题的时间了~ 今天也带来了十分有趣的题目!用C语言实现——盗版Huybery系列之手抓饼赛马,这个题目很有意思,新颖的同时又很值得思考!我现在迫不及待地要和大家分享~!
大家听说过“田七赛马”的故事吗?
那是在遥远的战国时期了,当时的齐国上流社会赛马成风,上至国君下至大臣,常常以重金赌赛马的输赢。而田七是一个没什么心眼却很爱面子的大臣,别人找他赛马他不好意思拒绝。但由于策略不当,屡赌屡输。
终于,在他将要把所有的俸禄都输光的时候,他找到从小长在大草原,对各种马的习性,能力都很熟悉的朋友手抓饼,请他帮自己赢得下一场比赛。
手抓饼暗中观察了对手的马,发现田七的马和他的相差不远,只要运用一点小手段,就很有可能战胜对手。
下场比赛的规则为:田七和对手分别使用N匹马来参赛,比赛过程中不允许出现平局, 最后谁赢的场数多于一半谁就是获胜(最终可能没有赢家)。假设每匹马都有恒定的速度,而手抓饼已经掌握了所有马的速度。
现在,请你来你来预测一下,手抓饼能否帮助田七赢得比赛。
输入:
输入有多组测试数据。
每组测试数据包括3行:
第一行输入N(1≤N≤1000)。表示马的数量。
第二行有N个整型数字,即田七的N匹马的速度。
第三行有N个整型数字,即对手的N匹马的速度。
当N为0时结束。输出:
若通过手抓饼的安排,田七能赢得比赛,那么输出“YES”。
否则输出“NO”。每个输出占一行。
样例输入
5
2 3 3 4 5
1 2 3 4 5
4
2 2 1 2
2 2 3 1
0
样例输出
YES
NO
- 田忌赛马的故事想必大家都知道,田忌获胜的秘诀就是让自己的劣马来消耗掉对手的好马,然后用自己的好马来对上敌方的劣马,是非常阴险的做法。
- 我们就依着田忌的做法来写代码。
- 首先输入马匹的个数,接着输入两组马匹速度的数据。
- 然后用冒泡排序将马匹的速度由低到高排序。
- 我们定义一个变量计数君t=0来存放数据,等下来判断比赛结果。
- 用两组for循环来遍历两组数据,如果田忌的马匹的速度大于对手的马匹速度的任意一只,那么就让 t+=1 。
- 因为数组已经是有序数组,我们下次循环对手的马匹时,就可以从下标为t的元素开始。
- 如果最后t>n/2,即田忌获胜,否则田忌落败。
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
int main()
{
int n, a[1000], b[1000];
while (cin >> n)
{
if (n == 0) break;
else
{
int t = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
cin >> b[i];
}
t = 0;
for (int i = 0; i < n - 1; i++)
{
for (int r = 0; r < n - 1 - i; r++)
{
if (a[r] > a[r + 1])
{
int d = a[r];
a[r] = a[r + 1];
a[r + 1] = d;
}
if (b[r] > b[r + 1])
{
int f = b[r];
b[r] = b[r + 1];
b[r + 1] = f;
}
}
}
for (int j = 0; j < n; j++)
{
for (int m = t; m < n; m++)
{
if (a[j] > b[m])
{
t += 1;
break;
}
else
;
}
}
if (t > n / 2) cout << "YES";
else cout << "NO";
cout << endl;//打印换行,方便输入。
}
}
return 0;
}
这是我们学校蓝桥杯选拔赛上面的题目,我觉得很有意思就写了这篇博客,这种题目比较耐人寻味,比如这道题肯定就还有很多其他的做法,里面的冒泡排序也可以直接用qsort函数来实现,不过我还没有实践,哪位大佬有更好的做法,请在评论区不吝赐教哦~如果觉得我写的不错的话还请点个赞和关注哦~我会持续输出编程的知识的!