Greatest Number这是我用 c语言做的 用了个二分吧

本文探讨如何通过理解题目并正确应用二分查找算法来解决问题。首先,明确题目的核心概念,避免误解。接着,实现算法并进行优化,特别关注在最大值查找部分的逻辑。通过实例演示算法的应用,并在代码实现中展示关键步骤。
<pre class="cpp" name="code">这是一道用一下二分的题  题意要先看懂 ,不要看错就行 就是先找最大值 最后要用二分跟他比较 这个 部分 要清楚 之前我做的时候就是这里over了。。。。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int num[10000000];
int main()
{
    int n,m,i,j;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        int sum=0;
        int sum1=0;
        int aim=0;
        int mi=0;
        int k=0;
        if(n==0&&m==0)
            break;
        num[0]=0;
        for(i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
            if(num[i]>m)
              {
                  i--;
                  n--;
              }
        }
        int nut=n+1;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                num[nut++]=num[i]+num[j];
            }
        }
        sort(num,num+nut);
        for(i=0;i<nut;i++)
        {
            sum=0,sum1=nut,aim=num[1],mi=0;
            while(sum<sum1)
            {
                mi=(sum+sum1)/2;
                if(num[mi]+num[i]<=m)
                {
                    if(num[mi]+num[i]>=aim)
                        aim=num[i]+num[mi];
                    sum=mi+1;
                }
                else
                    sum1=mi;
            }

        }
        k++;
        printf("Case %d: %d\n\n",k,aim);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值