| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 288 人关注过本帖
标题:求问二分法,哪错了
取消只看楼主 加入收藏
z1443043531
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2015-1-23
结帖率:53.85%
收藏
 问题点数:0 回复次数:0 
求问二分法,哪错了
http://acm.hdu.


#include <stdio.h>
#include <string.h>

int main()
{
    int abc( int *z, int l, int r, int n );
    int z1[100000], z2[100000];
    memset( z1, 0, sizeof(z1) );
    memset( z2, 0, sizeof(z2) );
    int i, j, k, l, m, n, max, a, b;

    for( i = j = l = k = m = 1; i <= 151200 || j <= 151200; m++, i = m * m * m, j = m * (m+1) * (m+2) / 6.0 )
    {
        if( i <= 151200 )
            z1[l++] = i;

        if( j <= 151200 )
            z2[k++] = j;
    }

    while( scanf( "%d", &n) != EOF )

    {
        i = 0;
        a = 0;
        max = 0;
        b = 0;

        if( n == 0 )
            break;

        a = abc( z1, 0, l-1, n );

        b = abc( z2, 0, k-1, n );

        if( a > b )
            max = a;
        else
            max = b;

        while( z1[i] <= a )
        {
            b = abc( z2 , 0, k-1, n-z1[i] ) + z1[i];

            if( b > max )
                max = b;

            i++;
        }
        printf( "%d\n", max );
    }


    return 0;
}

int abc( int *z, int l, int r, int n )
{
    int mid;
    while( r - l > 1 )
    {
        mid = ( l + r ) >> 1;

        if( z[mid] > n )
            r = mid;
        else if( z[mid] == n )
            return n;
        else
            l = mid;
    }
    return z[r] > n ? z[l] : z[r];
}
搜索更多相关主题的帖子: include 二分法 
2015-03-17 20:31
快速回复:求问二分法,哪错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016965 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved