💡前言🌞:
大伙们好!😄又到了小陈蓝桥杯每日一题的时间了~ 😋😋😋今天也带来了十分有趣的题目!🥰🥰🥰用C语言实现——盗版Huybery系列之手抓饼赛马,这个题目很有意思,新颖的同时又很值得思考!我现在迫不及待地要和大家分享~!😄🤗🤗
💛盗版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 <iostream> 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函数来实现,不过我还没有实践,哪位大佬有更好的做法,请在评论区不吝赐教哦~😀如果觉得我写的不错的话还请点个赞和关注哦~我会持续输出编程的知识的!🌞🌞🌞