news 2026/7/6 4:35:01

(新卷,200分)- 数字序列比大小(Java JS Python C)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(新卷,200分)- 数字序列比大小(Java JS Python C)

(新卷,200分)- 数字序列比大小(Java & JS & Python & C)

题目描述

A,B两个人玩一个数字比大小的游戏,在游戏前,两个人会拿到相同长度的两个数字序列,两个数字序列不相同的,且其中的数字是随机的。

A,B各自从数字序列中挑选出一个数字进行大小比较,赢的人得1分,输的人扣1分,相等则各自的分数不变。 用过的数字需要丢弃。

求A可能赢B的最大分数。

输入描述

输入数据的第1个数字表示数字序列的长度N,后面紧跟着两个长度为N的数字序列。

输出描述

A可能赢B的最大分数

备注
  1. 这里要求计算A可能赢B的最大分数,不妨假设,A知道B的数字序列,且总是B先挑选数字并明示。
  2. 可以采用贪心策略,能赢的一定要赢,要输的尽量减少损失。
用例
输入3
4 8 10
3 6 4
输出3
说明

输入数据第1个数字表示数字序列长度为3,后面紧跟着两个长度为3的数字序列。

序列A:4 8 10

序列B:3 6 4

A可以赢的最大分数是3。获得该分数的比大小过程可以是:

1)A:4 B:3

2)A:8 B:6

3)A:10 B:4

题目解析

本题其实就是田忌赛马问题

JS算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; rl.on("line", (line) => { lines.push(line); if (lines.length == 3) { const n = parseInt(lines[0]); const a = lines[1].split(" ").map(Number); const b = lines[2].split(" ").map(Number); console.log(getResult(n, a, b)); lines.length = 0; } }); function getResult(n, a, b) { a.sort((a, b) => a - b); b.sort((a, b) => a - b); let la = 0; // 指向田忌最慢的马 let ra = n - 1; // 指向田忌最快的马 let lb = 0; // 指向齐王最慢的马 let rb = n - 1; // 指向齐王最快的马 let ans = 0; // 记录田忌获得银币数 while (la <= ra) { if (a[ra] > b[rb]) { // 田忌最快的马 比 齐王最快的马要快, 则直接比 ans += 1; ra--; rb--; } else if (a[ra] < b[rb]) { // 田忌最快的马 比 齐王最快的马要慢, 则结果肯定输, 为了保留田忌最快的马, 我们应该用田忌最慢的马去消耗掉齐王最快的马 ans -= 1; la++; rb--; } else { // 田忌最快的马 和 齐王最快的 速度相同, 此时如果平局的话,则会让田忌损失最快的马,因此我们应该找到田忌最慢的马, 即田忌必输的马来消耗掉齐王最快的马 if (a[la] > b[lb]) { // 如果田忌最慢的马 比 齐王最慢的马 快, 则此时田忌最慢的马不是必输的马 ans += 1; la++; lb++; } else { // 如果田忌最慢的马速度 <= 齐王最慢的马速度, 此时应该让田忌最慢的马 去消耗 齐王最快的马 // 如果齐王最快的马速度 > 田忌最慢的马速度,则田忌失去银币 // 如果齐王最快的马速度 == 田忌最慢的马速度,则田忌不失去银币 if (b[rb] > a[la]) ans -= 1; la++; rb--; } } } return ans; }
Java算法源码
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); int[] a = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); int[] b = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); System.out.println(getResult(n, a, b)); } public static int getResult(int n, int[] a, int[] b) { Arrays.sort(a); Arrays.sort(b); int la = 0; // 指向田忌最慢的马 int ra = n - 1; // 指向田忌最快的马 int lb = 0; // 指向齐王最慢的马 int rb = n - 1; // 指向齐王最快的马 int ans = 0; // 记录田忌获得银币数 while (la <= ra) { if (a[ra] > b[rb]) { // 田忌最快的马 比 齐王最快的马要快, 则直接比 ans += 1; ra--; rb--; } else if (a[ra] < b[rb]) { // 田忌最快的马 比 齐王最快的马要慢, 则结果肯定输, 为了保留田忌最快的马, 我们应该用田忌最慢的马去消耗掉齐王最快的马 ans -= 1; la++; rb--; } else { // 田忌最快的马 和 齐王最快的 速度相同, 此时如果平局的话,则会让田忌损失最快的马,因此我们应该找到田忌最慢的马, 即田忌必输的马来消耗掉齐王最快的马 if (a[la] > b[lb]) { // 如果田忌最慢的马 比 齐王最慢的马 快, 则此时田忌最慢的马不是必输的马 ans += 1; la++; lb++; } else { // 如果田忌最慢的马速度 <= 齐王最慢的马速度, 此时应该让田忌最慢的马 去消耗 齐王最快的马 // 如果齐王最快的马速度 > 田忌最慢的马速度,则田忌失去银币 // 如果齐王最快的马速度 == 田忌最慢的马速度,则田忌不失去银币 if (b[rb] > a[la]) ans -= 1; la++; rb--; } } } return ans; } }
Python算法源码
# 输入获取 n = int(input()) a = list(map(int, input().split())) # 田忌的马速度数组 b = list(map(int, input().split())) # 齐王的马速度数组 # 算法入口 def getResult(): a.sort() b.sort() la = 0 # 指向田忌最慢的马 ra = n - 1 # 指向田忌最快的马 lb = 0 # 指向齐王最慢的马 rb = n - 1 # 指向齐王最快的马 ans = 0 # 记录田忌获得银币数 while la <= ra: if a[ra] > b[rb]: # 田忌最快的马 比 齐王最快的马要快, 则直接比 ans += 1 ra -= 1 rb -= 1 elif a[ra] < b[rb]: # 田忌最快的马 比 齐王最快的马要慢, 则结果肯定输, 为了保留田忌最快的马, 我们应该用田忌最慢的马去消耗掉齐王最快的马 ans -= 1 la += 1 rb -= 1 else: # 田忌最快的马 和 齐王最快的 速度相同, 此时如果平局的话,则会让田忌损失最快的马,因此我们应该找到田忌最慢的马, 即田忌必输的马来消耗掉齐王最快的马 if a[la] > b[lb]: # 如果田忌最慢的马 比 齐王最慢的马 快, 则此时田忌最慢的马不是必输的马 ans += 1 la += 1 lb += 1 else: # 如果田忌最慢的马速度 <= 齐王最慢的马速度, 此时应该让田忌最慢的马 去消耗 齐王最快的马 # 如果齐王最快的马速度 > 田忌最慢的马速度,则田忌失去银币 # 如果齐王最快的马速度 == 田忌最慢的马速度,则田忌不失去银币 if b[rb] > a[la]: ans -= 1 la += 1 rb -= 1 return ans # 算法调用 print(getResult())
C算法源码
#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 int getResult(int n, int* a, int* b); int cmp(const void* a, const void* b); int main() { int n; scanf("%d", &n); int a[MAX_SIZE]; for(int i=0; i<n; i++) { scanf("%d", &a[i]); } int b[MAX_SIZE]; for(int i=0; i<n; i++) { scanf("%d", &b[i]); } printf("%d\n", getResult(n, a, b)); return 0; } int getResult(int n, int* a, int* b) { qsort(a, n, sizeof(int), cmp); qsort(b, n, sizeof(int), cmp); int la = 0; // 指向田忌最慢的马 int ra = n - 1; // 指向田忌最快的马 int lb = 0; // 指向齐王最慢的马 int rb = n - 1; // 指向齐王最快的马 int ans = 0; // 记录田忌获得银币数 while(la <= ra) { if(a[ra] > b[rb]) { // 田忌最快的马 比 齐王最快的马要快, 则直接比 ans += 1; ra--; rb--; } else if(a[ra] < b[rb]) { // 田忌最快的马 比 齐王最快的马要慢, 则结果肯定输, 为了保留田忌最快的马, 我们应该用田忌最慢的马去消耗掉齐王最快的马 ans -= 1; la++; rb--; } else { // 田忌最快的马 和 齐王最快的 速度相同, 此时如果平局的话,则会让田忌损失最快的马,因此我们应该找到田忌最慢的马, 即田忌必输的马来消耗掉齐王最快的马 if(a[la] > b[lb]) { // 如果田忌最慢的马 比 齐王最慢的马 快, 则此时田忌最慢的马不是必输的马 ans += 1; la++; lb++; } else { // 如果田忌最慢的马速度 <= 齐王最慢的马速度, 此时应该让田忌最慢的马 去消耗 齐王最快的马 // 如果齐王最快的马速度 > 田忌最慢的马速度,则田忌失去银币 // 如果齐王最快的马速度 == 田忌最慢的马速度,则田忌不失去银币 if(b[rb] > a[la]) { ans -= 1; } la++; rb--; } } } return ans; } int cmp(const void* a, const void* b) { return *((int*) a) - *((int*) b); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 13:32:14

(新卷,200分)- 评论转换输出(Java JS Python)

(新卷,200分)- 评论转换输出&#xff08;Java & JS & Python&#xff09;题目描述在一个博客网站上&#xff0c;每篇博客都有评论。每一条评论都是一个非空英文字母字符串。评论具有树状结构&#xff0c;除了根评论外&#xff0c;每个评论都有一个父评论。当评论保存时…

作者头像 李华
网站建设 2026/7/6 13:56:52

FLUX.1-dev图文理解能力深度测评:视觉问答与指令微调表现分析

FLUX.1-dev图文理解能力深度测评&#xff1a;视觉问答与指令微调表现分析 在多模态AI迅速演进的今天&#xff0c;我们早已不再满足于“输入文字、输出图像”这样简单的文生图模式。真正让人眼前一亮的是——当用户问出一句“这只猫为什么趴在窗台上打盹&#xff1f;”&#xff…

作者头像 李华
网站建设 2026/7/6 16:38:03

内点法求最优潮流(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

作者头像 李华
网站建设 2026/7/6 8:59:53

如何快速释放Windows磁盘空间:终极存储分析工具完整指南

您的Windows电脑是否经常提示"磁盘空间不足"&#xff1f;是否曾为寻找那些占用大量空间的神秘文件而烦恼&#xff1f;今天就为您介绍一款能够彻底解决这些问题的专业磁盘管理工具&#xff0c;让您轻松掌握磁盘使用情况&#xff0c;快速释放宝贵空间。 【免费下载链接…

作者头像 李华
网站建设 2026/7/6 23:12:19

ComfyUI与Redis缓存集成:加速大规模生成任务

ComfyUI与Redis缓存集成&#xff1a;加速大规模生成任务 在AI内容生成从“能用”迈向“好用、高效、可量产”的今天&#xff0c;一个看似不起眼的技术组合正在悄然改变工作流的运行效率——ComfyUI 与 Redis 的深度集成。当可视化节点图遇见内存级缓存系统&#xff0c;原本耗时…

作者头像 李华
网站建设 2026/7/5 1:44:49

HunyuanVideo-Foley离线版发布:支持内网部署与私有化音效生成

HunyuanVideo-Foley离线版发布&#xff1a;支持内网部署与私有化音效生成 在影视后期、短视频工厂乃至军事仿真系统中&#xff0c;一段精准的脚步声可能比画面本身更能传递紧张氛围。然而长期以来&#xff0c;这类细节音效的制作始终依赖人工“Foley录音”——演员在录音棚里模…

作者头像 李华