当前位置: 首页 > news >正文

(新卷,100分)- 游戏分组(Java JS Python C)

(新卷,100分)- 游戏分组(Java & JS & Python & C)

题目描述

部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。

每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为示例尽量相近的两队。

一队的实力可以表示为这一队 5 名队员的评分总和。

现在给你 10 名参与者的游戏水平评分,请你根据上述要求分队,最后输出这两组的实力差绝对值。

例:10 名参赛者的评分分别为:5 1 8 3 4 6 7 10 9 2,分组为(1 3 5 8 10)和(2 4 6 7 9),两组实力差最小,差值为1。有多种分法,但是实力差的绝对值最小为1。

输入描述

10个整数,表示10名参与者的游戏水平评分。范围在 [1, 10000] 之间。

输出描述

1个整数,表示分组后两组实力差绝对值的最小值。

用例
输入1 2 3 4 5 6 7 8 9 10
输出1
说明10名队员分为两组,两组实力差绝对值最小为1
题目解析
JavaScript算法源码
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { const arr = (await readline()).split(" ").map(Number); arr.sort((a, b) => a - b); const res = []; // dfs求10选5的去重组合,并将组合之和记录进res中,即res中记录的是所有可能性的5人小队实力值之和 dfs(arr, 0, 0, 0, res); const sum = arr.reduce((p, c) => p + c); // 某队实力为subSum,则另一队实力为sum - subSum,则两队实力差为 abs((sum - subSum) - subSum),先求最小实力差 const ans = res .map((subSum) => Math.abs(sum - 2 * subSum)) .sort((a, b) => a - b)[0]; console.log(ans); })(); // 求解去重组合 function dfs(arr, index, level, sum, res) { if (level === 5) { return res.push(sum); } for (let i = index; i < 10; i++) { if (i > index && arr[i] == arr[i - 1]) continue; // arr已经升序,这里进行树层去重 dfs(arr, i + 1, level + 1, sum + arr[i], res); } }
Java算法源码
import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] arr = new int[10]; for (int i = 0; i < 10; i++) { arr[i] = sc.nextInt(); } System.out.println(getResult(arr)); } public static int getResult(int[] arr) { Arrays.sort(arr); ArrayList<Integer> res = new ArrayList<>(); // dfs求10选5的去重组合,并将组合之和记录进res中,即res中记录的是所有可能性的5人小队实力值之和 dfs(arr, 0, 0, 0, res); int sum = Arrays.stream(arr).reduce(Integer::sum).orElse(0); // 某队实力为subSum,则另一队实力为sum - subSum,则两队实力差为 abs((sum - subSum) - subSum),先求最小实力差 return res.stream().map(subSum -> Math.abs(sum - 2 * subSum)).min((a, b) -> a - b).orElse(0); } // 求解去重组合 public static void dfs(int[] arr, int index, int level, int sum, ArrayList<Integer> res) { if (level == 5) { res.add(sum); return; } for (int i = index; i < 10; i++) { if (i > index && arr[i] == arr[i - 1]) continue; // arr已经升序,这里进行树层去重 dfs(arr, i + 1, level + 1, sum + arr[i], res); } } }
Python算法源码
# 输入获取 arr = list(map(int, input().split())) # 求解去重组合 def dfs(arr, index, level, sumV, res): if level == 5: res.append(sumV) return for i in range(index, 10): if i > index and arr[i] == arr[i - 1]: # arr已经升序,这里进行树层去重 continue dfs(arr, i + 1, level + 1, sumV + arr[i], res) # 算法入口 def getResult(arr): arr.sort() res = [] # dfs求10选5的去重组合,并将组合之和记录进res中,即res中记录的是所有可能性的5人小队实力值之和 dfs(arr, 0, 0, 0, res) sumV = sum(arr) # 某队实力为subSum,则另一队实力为sum - subSum,则两队实力差为 abs((sum - subSum) - subSum),先求最小实力差 return min(map(lambda subSum: abs(sumV - 2 * subSum), res)) # 算法调用 print(getResult(arr))
C算法源码
#include <stdio.h> #include <stdlib.h> #include <limits.h> #define MIN(a,b) (a) < (b) ? (a) : (b) typedef struct ListNode { int ele; struct ListNode *next; } ListNode; typedef struct LinkedList { int size; ListNode *head; ListNode *tail; } LinkedList; LinkedList *new_LinkedList(); void addLast_LinkedList(LinkedList *link, int ele); void dfs(int arr[], int index, int level, int sum, LinkedList *res); int getResult(int arr[]); int main() { int arr[10]; for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } printf("%d\n", getResult(arr)); return 0; } int cmp(const void *a, const void *b) { return (*(int *) a) - (*(int *) b); } int getResult(int arr[]) { qsort(arr, 10, sizeof(int), cmp); LinkedList *res = new_LinkedList(); // dfs求10选5的去重组合,并将组合之和记录进res中,即res中记录的是所有可能性的5人小队实力值之和 dfs(arr, 0, 0, 0, res); int sum = 0; for (int i = 0; i < 10; i++) sum += arr[i]; int ans = INT_MAX; // 某队实力为subSum,则另一队实力为sum - subSum,则两队实力差为 abs((sum - subSum) - subSum),先求最小实力差 ListNode *cur = res->head; while (cur != NULL) { ans = MIN(ans, abs(sum - 2 * cur->ele)); cur = cur->next; } return ans; } // 求解去重组合 void dfs(int arr[], int index, int level, int sum, LinkedList *res) { if (level == 5) { addLast_LinkedList(res, sum); return; } for (int i = index; i < 10; i++) { if (i > index && arr[i] == arr[i - 1]) continue; // arr已经升序,这里进行树层去重 dfs(arr, i + 1, level + 1, sum + arr[i], res); } } LinkedList *new_LinkedList() { LinkedList *link = (LinkedList *) malloc(sizeof(LinkedList)); link->size = 0; link->head = NULL; link->tail = NULL; return link; } void addLast_LinkedList(LinkedList *link, int ele) { ListNode *node = (ListNode *) malloc(sizeof(ListNode)); node->ele = ele; node->next = NULL; if (link->size == 0) { link->head = node; link->tail = node; } else { link->tail->next = node; link->tail = node; } link->size++; }
http://www.cnnetsun.cn/news/445200.html

相关文章:

  • C#实战:用快马平台快速开发电商库存管理系统
  • AI助力JDK8下载与配置:一键解决环境搭建难题
  • VS2022下载实战应用案例分享
  • 付费知识系统源码的整体架构设计与模块划分
  • 程序员必看:RLM递归语言模型如何突破大模型长文本限制,收藏备用!
  • 嘉立创定制笔记本,下单免费送!
  • 程序员的健康之道:在代码与生活之间寻找平衡
  • 如何高效构建与测试非结构化道路场景?
  • 基于微信小程序的在线预约挂号系统(源代码+文档+PPT+调试+讲解)
  • AI应用架构师指南:构建业务需求到技术架构自动化映射智能体的核心模块
  • AI大模型:基于Python音乐推荐系统 数据分析可视化 协同过滤推荐算法 大数据毕业设计(全套源码+文档)建议收藏
  • 2601C++,pmr管理内存
  • 四元数散度和旋度-9
  • 基于SpringBoot的在线阅读图书平台网站源码设计与文档
  • 计及需求响应和电能交互的多主体综合能源系统主从博弈优化调度策略Matlab代码
  • 基于SpringBoot的老人健康信息管理系统(毕业设计项目源码+文档)
  • 面试必杀:什么是 ‘LangGraph Cloud’ 的底层并行架构?它如何处理数万个 Persistent Threads 的并发调度?
  • I创业颠覆认知——为什么传统产品经理正在消亡,三位超级个体如何重塑产品开发
  • 大模型产品经理十本经典书籍推荐:从技术原理到商业落地的全方位指南_大模型产品经理必读的十本书籍
  • 【收藏必备】从零开始掌握提示词工程:5大核心原则+实战案例,小白也能写出高质量提示词
  • 1.42 RAG完整流程详解:从文档处理到答案生成,5步构建知识库系统
  • 1.43 NativeRAG实战:无需复杂框架,用Python实现基础RAG系统
  • 1.45 Embedding模型选择指南:文本向量化,如何选择最适合的模型
  • CPU中的逻辑单元、存储单元的介绍
  • 关于dify 工作流的LLM并发顺序执行问题的复盘
  • 【图像加密】基于超混沌系统和斐波那契 Q 矩阵的新图像加密算法研究附matlab代码
  • JavaScript DOM 核心操作:从内容到节点的实战指南
  • 所有权之谜:为什么没有一流的营利性大学?
  • Meta数十亿美元收购Butterfly Effect:中国AI团队如何打造自主智能体并成功出海
  • LangGraph人机协同(HITL)实战:三种核心模式详解+企业部署避坑指南