游戏分组/王者荣耀

news/2024/7/20 16:18:32 标签: 深度优先, 数据结构, c语言, 华为od, dfs

题目描述

部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分 5 为两队,每队 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。

代码

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
int total = 0;
int res = INT_MAX;
// 深度优先搜索函数
void dfs(int score[10], int idx, int count, int currentSum) {
    // 当我们为一个队伍选择了5名玩家时
    if (count == 5) {
        // 计算另一个队伍的总和
        int otherTeamSum = total - currentSum;
        // 用较小的差值更新结果
        res = abs(currentSum - otherTeamSum) < res
                  ? abs(currentSum - otherTeamSum)
                  : res;
        return;
    }
    // 如果我们已经考虑了所有玩家,停止递归
    if (idx == 10) {
        return;
    }
    // 为第一个队伍选择当前玩家
    dfs(score, idx + 1, count + 1, currentSum + score[idx]);
    // 不为第一个队伍选择当前玩家
    dfs(score, idx + 1, count, currentSum);
}
int main() {
    int score[10];
    for (int i = 0; i < 10; i++) {
        scanf("%d", &score[i]);
        total += score[i];
    }

    dfs(score, 0, 0, 0);
    printf("%d", res);
    return 0;
}

注意: <limits.h>

<limits.h> 是 C 语言的一个标准库头文件,它定义了各种数据类型(如整数、浮点数等)的最小和最大可能值。在程序中包含 <limits.h> 头文件后,可以使用预定义的宏来访问这些值。

例如,在给定的代码片段中,INT_MAX 就是来自 <limits.h> 的一个预定义宏,表示 int 类型的最大值。这个宏在初始化变量 res 时被用作初始的最大可能实力差:

int res = INT_MAX;

通过这样的方式,我们可以确保 res 被初始化为一个足够大的数值,以便在后续计算中能够容纳任何可能出现的实力差,并能够在遍历所有分组方案后更新到真正的最小实力差。


http://www.niftyadmin.cn/n/5382915.html

相关文章

数字化转型导师坚鹏:政府数字化转型之数字化新技术解析与应用

政府数字化转型之数字化新技术解析与应用 课程背景&#xff1a; 数字化背景下&#xff0c;很多政府存在以下问题&#xff1a; 不清楚新技术的发展现状&#xff1f; 不清楚新技术的重要应用&#xff1f; 不清楚新技术的成功案例&#xff1f; 课程特色&#xff1a; 有…

5G网络RedCap

RedCap&#xff1a;RedCap&#xff08;Reduced Capability&#xff09;&#xff0c;即“降低能力”。它是3GPP在5G R17阶段&#xff0c;针对速率、时延要求不高的5G应用场景&#xff0c;专门推出的一种新技术标准协议&#xff0c;旨在全面提升5G网络质量和覆盖率&#xff0c;也…

桌面显示器应用Type-C接口

随着科技的飞速发展&#xff0c;桌面显示器作为我们日常工作中不可或缺的设备之一&#xff0c;也在不断地更新换代。其中&#xff0c;Type-C接口的应用成为了桌面显示器发展的一个重要趋势。那么&#xff0c;桌面显示器应用Type-C接口究竟有什么好处呢&#xff1f; 首先&#x…

8.2 新特性 - 透明的读写分离

文章目录 前言1. 安装部署1.1 下载安装包1.2 MySQL Shell1.3 配置 MySQL 实例1.4 启动 ReplicaSet1.5 启动 8.2 Router 2. 测试路由总结 前言 MySQL 8.0 官方推出过一个高可用方案 ReplicaSet 主要由 Router、MySQL Shell、MySQL Server 三个组件组成。 MySQL Shell 负责管理…

LeetCode //C - 435. Non-overlapping Intervals

435. Non-overlapping Intervals Given an array of intervals intervals where intervals[i] [ s t a r t i , e n d i ] [start_i, end_i] [starti​,endi​], return the minimum number of intervals you need to remove to make the rest of the intervals non-overlap…

汽车零部件软件开发中常用滤波算法

滑动窗口滤波器:均值滤波与中值滤波的应用及局限性 滑动窗口滤波是数字信号处理中的基本技术,通过在数据序列上移动一个固定大小的窗口并计算窗口内数据点的统计量(如均值或中值)来平滑信号。本文将探讨滑动窗口均值滤波和中值滤波的基本实现、工作原理及其局限性,并引入…

Flink Upsert Kafka SQL Connector 介绍

一 前言 在某些场景中&#xff0c;比方GROUP BY聚合之后的后果&#xff0c;须要去更新之前的结果值。这个时候&#xff0c;须要将 Kafka 记录的 key 当成主键解决&#xff0c;用来确定一条数据是应该作为插入、删除还是更新记录来解决。在 Flink1.11 中&#xff0c;能够通过 f…

Redis RabbitMQ

Redis&#xff1a;轻量级&#xff0c;NoSQL数据库 redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这…