UVA 138 Street Numbers

 

我只会用二分枚举,即sum(1,mid-1) == sum(mid+1, n) -->2*pow(mid, 2) == n*(n+1); 然后去网上看了看其他人是用打表的方式过去的,今天第一次接触了暴力打表。

共同进步啊。

由于我不知道最大数是多少,于是我将n的范围开到了一亿,反正也只要前十组,如果少了就增加n的范围。

 

打表CODE:

 

#include<stdio.h>
#include< string.h>
int main()
{
    freopen( " UVA138.cpp "" w ", stdout);
     long  long  int i, j, x, mid, y;
    printf( " #include <cstdio>\n ");
    printf( " int main()\n ");
    printf( " {\n ");
     for(i =  6; i <=  100000000; i++)
    {
        x =  1;
        y = i+ 1;
         for(;;)
        {
            mid = (x+y)/ 2;
             if(mid == x)  break;
             if(mid*mid* 2 > i*(i+ 1))
            {
                y = mid;
            }
             else x = mid;
        }
         if(mid * mid *  2 == i * (i +  1))
            printf( " \tprintf(\"%10lld%10lld\\n\");\n ", mid, i);
    }
    printf( " }\n ");
     return  0;
}

 

CODE:

#include <cstdio>
int main()
{
    printf( "          6         8\n ");
    printf( "         35        49\n ");
    printf( "        204       288\n ");
    printf( "       1189      1681\n ");
    printf( "       6930      9800\n ");
    printf( "      40391     57121\n ");
    printf( "     235416    332928\n ");
    printf( "    1372105   1940449\n ");
    printf( "    7997214  11309768\n ");
    printf( "   46611179  65918161\n ");
}

 

 

转载于:https://www.cnblogs.com/g0feng/archive/2012/10/20/2732026.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值