田忌赛马Java解答
你一定听过田忌赛马的故事吧?
如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛。赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两银子,平局的话不输不赢。 请问田忌最多能赢多少银子?
关于输入:
输入包含多组测试数据,每组测试数据的第一行是一个整数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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package tianjisaima; import java.util.Scanner; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main{ public static void main(String args[]){ int n, m; List<Integer> list1= new ArrayList<Integer>(); List<Integer> list2= new ArrayList<Integer>(); Scanner in= new Scanner(System.in); while ( true ){ n=in.nextInt(); if (n== 0 ) break ; //输入数据 for ( int i = 0 ; i < n; ++i) { list1.add(in.nextInt()); } for ( int i = 0 ; i < n; ++i) { list2.add(in.nextInt()); } //处理数据 Collections.sort(list1); Collections.sort(list2); int i= 0 , j= 0 , x=n- 1 , y=n- 1 ,count= 0 ; boolean bLast= true ; while (bLast) { //是否是最后一匹马 if (x==i) bLast= false ; if (list1.get(x) > list2.get(y)) { //如果田忌当前最好的马可以胜齐王最好的马,那么比一场 x--; y--; count+= 200 ; } else if (list1.get(i)> list2.get(j)) { //如果田忌当前最差的马可以胜齐王最差的马,那么比一场 i++; j++; count += 200 ; } else { //否则,让田忌最差的马和齐王最好的好比一场 if (list1.get(i) < list2.get(y)) count -= 200 ; i++; y--; } } System.out.println(count); list1.clear();<br> list2.clear(); } } } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法