组队(蓝桥杯题库)

文章描述了一种通过编程解决篮球教练选择评分最高的首发阵容的问题。采用二维数组存储球员在不同位置的评分,通过遍历所有可能的组合,动态更新最大评分,最终找到每个位置评分之和的最大值。这种方法确保了全局最优解,而非局部最优解。

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

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

作为篮球队教练,你需要从以下名单中选出 11 号位至 55 号位各一名球员,组成球队的首发阵容。

每位球员担任 11 号位至 55 号位时的评分如下表所示。请你计算首发阵容 11 号位至 55 号位的评分之和最大可能是多少?

问题分析 

首先将表格转化成数据我定义了一个选手的二维数组第一维表示是第几位选手,第二维表示选手几号位的成绩,这样将表格转化为数据储存在计算机中,在计算其最大和时不能简单的寻找其每一号位的最大值相加,因为一个选手只能在一个位置,且每一个位置的最大值非同一选手的相加结果并不一定是最大的,举一个例子

999
877
788

第一行取9第二行取8第三行取7这样结果是24

但是第一行取8第二行取9第三行取8结果是25

所以只关注局部最优相加的整体并不一定最优。

我解决的思路遍历每一种可能的组合,随时更新最大值,这样最后的结果一定是最大的。

代码实现

#include<stdio.h>
int main(){
  int xuanshou[20][5]={//将表格转化为数据
  {97,90,0,0,0},
  {92,85,96,0,0},
  {0,0,0,0,93},
  {0,0,0,80,86},
  {89,83,97,0,0},
  {82,86,0,0,0},
  {0,0,0,87,90},
  {0,97,96,0,0},
  {0,0,89,0,0},
  {95,99,0,0,0},
  {0,0,96,97,0},
  {0,0,0,93,98},
  {94,91,0,0,0},
  {0,83,87,0,0},
  {0,0,98,97,98},
  {0,0,0,93,86},
  {98,83,99,98,81},
  {93,87,92,96,98},
  {0,0,0,89,92},
  {0,99,96,95,81}
  };
  int max=0;//记录最大值
  for(int i=0;i<20;i++){//一号位的选手可能性
    for(int j=0;j<20;j++){//二号位的选手可能性
      if(i!=j)//一号位与二号位的选手不能是同一位选手
      for(int k=0;k<20;k++){//同上
        if(k!=i&&k!=j)
        for(int l=0;l<20;l++){
          if(l!=i&&l!=j&&l!=k)
          for(int m=0;m<20;m++){
            if(m!=i&&m!=j&&m!=k&&m!=l){//求出分数之和
              int sum=xuanshou[i][0]+xuanshou[j][1]+xuanshou[k][2]+xuanshou[l][3]+xuanshou[m][4];
              if(max<sum){//比较,根据比较结果来决定是否更新最大值
                max=sum;
              }
            }
          }
        }
      }
    }
  }
  printf("%d",max);//输出结果
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值