【蓝桥杯刷题】盗版Huybery系列之手抓饼赛马

【蓝桥杯刷题】—— 盗版Huybery系列之手抓饼赛马

目录【蓝桥杯刷题】盗版Huybery系列之手抓饼赛马_第1张图片

前言:  

  盗版Huybery系列之手抓饼赛马题目 

 解题思路的分享  

 题目源码的分享

 本菜鸡&总结 

 

博客昵称:陈大大陈

座右铭:所谓觉悟,就是在漆黑的荒野上开辟出一条理当前进的光明大道。

博主简介:一名热爱C/C++和算法等技术,喜欢运动,爱胡思乱想却胸怀大志的小博主!

博主&唠嗑:早中晚安!各位CSDN的朋友!我是博客新人陈大大陈,希望我的文章能为你带来帮助!欢迎大家在评论区畅所欲言!也希望大家多多为我提出您宝贵的建议!如果觉得我写的不错的话还请点个赞和关注哦~

前言:  

大伙们好!又到了小陈蓝桥杯每日一题的时间了~ 今天也带来了十分有趣的题目!用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 
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函数来实现,不过我还没有实践,哪位大佬有更好的做法,请在评论区不吝赐教哦~如果觉得我写的不错的话还请点个赞和关注哦~我会持续输出编程的知识的! 

你可能感兴趣的:(蓝桥杯,职场和发展,c++,算法,c语言)