博客摘录「 [蓝桥杯]真题讲解:冶炼金属(暴力+二分)」2024年2月20日

    for(int i = 1; i <= 1e6; i ++)//枚举的转化率V
    {
        bool flag = true;//标记一下当前的V是否合法

        for(int j = 0; j < n; j ++)
        {
            if(b[j] != (a[j] / i))   

 //这里把任一(第j条)不合法的v去掉,留下N条数据全合法的吗?

 假设第j条所枚举的v被判定为合法,则将其输出,跳出最外层循环。 

(❌) 准确的说是凡遇到不合法的v都会继续内层循环,判断此v

是否满足所有(n-1)条,若满足则继续内层循环直到(n-1)次,如                                               遇任意一条不满足则跳出内层循环,判断一个v(i+1个)是否符合全                                               部,若符合全部条则将其输出,并跳出最外层循环。

 首先此合法v是该条最小合法v值,是否意味着它是所有条合法且最小                                               v 值?    答案是否,它会继续循环直到n-1次,若此v全部条目均合                                                   法,则将其输出,否则将枚举下一个v进行判断。

 还是把全部(n-1条)不合法的v去掉,余下的是合法的v? 是。

来模拟一下运行 b[0] != (a[0] / 1)  假设此时b是2 a是3 显然3/1=3  

 2=3/v         2=<3/v<3        1<v<=1.5 v 若取整无合法v继续判断内循环

直到n-1次跳出内循环,判断下一个v是否全部合法,如全部合法则输出

综上简单来说此内循环会判断n-1条此v是否全部合法,全部合法则标                                                记并跳出内循环,循环外if通过标记将合法v输出,并通过break函数跳                                              出最外层for循环。
            {
                flag = false;
                break;
            }
        }
        if(flag)
        {
            cout << i << " ";
            break;
        }
    }

博客地址[蓝桥杯]真题讲解:冶炼金属(暴力+二分)_python蓝桥杯冶炼金属题解-CSDN博客

题目蓝桥杯2023年第十四届省赛真题-冶炼金属 - C语言网 (dotcpp.com)

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值