第十四届蓝桥杯c/c++大学B组——冶炼金属

本文介绍了一种解决生产问题中V值最大最小限制的算法,利用数据集的最大下界和最小上界的概念,通过遍历找出V的最大值为最小上界加1,最小值为最大下界。作者提供了C语言代码实现这一思路。

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

题目

思路

这题不是很难哈,用暴力也可以直接写出来,但是这题不是填空题哈,而且题目规定的测评用例数据还是蛮大的,为避免超时,我们还是思考一下比较好的算法来解决。

不知道大家初中数学有没有做到那种求数据集的最大下界和最小上界的问题哈,就拿题目给的用例来说吧。

AB  上界(A/B)说明

     下界

(A/(B+1))

说明
753     25要满足要求,V最多设置为25,再多就不能生产3个X了       18要生产出4个X,V最多设置为18,再多就只能生产3个了
532   26要满足要求V最多设置为26,再多就不能生产2个X了       17要生产出3个X,V最多设置为17,再多就只能生产2个了
592   29要满足要求,V最多设置为29,再多就不能生产2个X了       19要生产出3个X,V最多设置为19,再多就只能生产2个了

终上分析,为了符合三组数据的需求,V的最大值就是最小上界25,V的最小值就是最大下界+1,也就是20。这就是这个解决这个问题的思路,接下来就是按照这个思路遍历数据找到最小上界V_max和最大下界V_min。当然,大家也能通过二分排序的思想设计算法,但我这人比较懒,能直接解决的我绝不会再画功夫去想更好的算法,哈哈哈^-^。

代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int N = 0;
  scanf("%d",&N);
  int data[N][2];
  for(int i =0;i<N;i++){
    for(int j=0;j<2;j++){
        scanf("%d",&data[i][j]);
    }
  }
  //思路:最小值:最大下界+1;最大值:最小上界
  int minV = data[0][0]/(data[0][1]+1);
  int maxV = data[0][0]/data[0][1];
  for(int i=1;i<N;i++){
      if(minV<data[i][0]/(data[i][1]+1)){
        minV = data[i][0]/(data[i][1]+1);
      }
      if(maxV>data[i][0]/data[i][1]){
        maxV = data[i][0]/data[i][1];
      }
  }
  printf("%d %d",minV+1,maxV);
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值