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

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

目录

💡前言🌞:  

  💛盗版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 <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函数来实现,不过我还没有实践,哪位大佬有更好的做法,请在评论区不吝赐教哦~😀如果觉得我写的不错的话还请点个赞和关注哦~我会持续输出编程的知识的!🌞🌞🌞 

  • 33
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈大大陈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值