C语言等级考试4级——田忌赛马

本文介绍了一种算法解决田忌赛马问题,给定田忌和齐王的马速,通过排序找出最佳比赛顺序,计算田忌可能赢得的最大银子数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

时间限制:5000

内存限制:65536

输入

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

输出

对每组数据,输出一个整数,表示田忌至多可以赢多少银子,如果田忌赢不了,就输出一个负数,表示田忌最少要输多少银子。

样例输入

3

92 83 71

95 87 74

2

20 20

20 20

2

20 19

22 18

0

样例输出

200

0

0

#include<bits/stdc++.h>
using namespace std;
int a;
int aa[1005],bb[1005];
int hhh()
{
	int s=0,x=0,w=0;
	for(int i=0;i<a;i++)
	{
		for(int j=i+w;j<a;j++)
		{
			if(aa[i]>bb[j])
			{
				x++;
				w++;
				break;
			}
			else if(aa[i]<bb[j])
			{
				s++;
			}
		}
	}
	return x-s;
}
bool cmpl(int x,int y)
{
	return x>y;
}
int main()
{
	
	while(1)
	{
		cin>>a;
		if(a==0)break;
		for(int i=0;i<a;i++)
		{
			cin>>aa[i];
		}
		for(int i=0;i<a;i++)
		{
			cin>>bb[i];
		}
		sort(aa,aa+a,cmpl);
		sort(bb,bb+a,cmpl);
		cout<<hhh()*200<<endl;
	}
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值