首页 > ACM题库 > HDU-杭电 > hdu 2551 竹青遍野[解题报告]C++
2014
02-10

hdu 2551 竹青遍野[解题报告]C++

竹青遍野

问题描述 :

"临流揽镜曳双魂 落红逐青裙 依稀往梦幻如真 泪湿千里云"
在MCA山上,除了住着众多武林豪侠之外,还生活着一个低调的世外高人,他本名逐青裙,因为经常被人叫做"竹蜻蜓",终改名逐青,常年隐居于山中,不再见外人.根据山上附近居民所流传的说法,逐青有一个很奇怪的癖好,从他住进来那天开始,他就开始在他的院子周围种竹子,第1个月种1根竹子,第2个月种8根竹子,第3个月种27根竹子…第N个月就种(N^3)根竹子.他说当他种下第X根竹子那一刻,就是他重出江湖之时!告诉你X的值,你能算出逐青的复出会是在第几个月吗?

输入:

首先输入一个t,表示有t组数据,跟着t行.每行是一个整数X,X < 1000000000

输出:

首先输入一个t,表示有t组数据,跟着t行.每行是一个整数X,X < 1000000000

样例输入:

3
1
2
10

样例输出:

1
2
3

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2551

题意:中文,直接循环可搞。

代码:

# include <stdio.h>


long long calc(long long x)
{
    long long i, sum = 0 ;
    for (i = 1 ; ; i++)
    {
        sum += i*i*i ;
        if (sum >= x) break ;
    }
    return i ;
}


int main ()
{
    int T, x ;
    scanf ("%d", &T) ;
    while (T--)
    {
        scanf ("%d", &x) ;
        printf ("%I64d\n", calc(x)) ;
    }
    return 0 ;
}

解题转自:http://www.cnblogs.com/lzsz1212/archive/2012/02/19/2357869.html


  1. int half(int *array,int len,int key)
    {
    int l=0,r=len;
    while(l<r)
    {
    int m=(l+r)>>1;
    if(key>array )l=m+1;
    else if(key<array )r=m;
    else return m;
    }
    return -1;
    }
    这种就能避免一些Bug
    l,m,r
    左边是l,m;右边就是m+1,r;

  2. 思路二可以用一个长度为k的队列来实现,入队后判断下队尾元素的next指针是否为空,若为空,则出队指针即为所求。

  3. #include <stdio.h>
    int main()
    {
    int n,p,t[100]={1};
    for(int i=1;i<100;i++)
    t =i;
    while(scanf("%d",&n)&&n!=0){
    if(n==1)
    printf("Printing order for 1 pages:nSheet 1, front: Blank, 1n");
    else {
    if(n%4) p=n/4+1;
    else p=n/4;
    int q=4*p;
    printf("Printing order for %d pages:n",n);
    for(int i=0;i<p;i++){
    printf("Sheet %d, front: ",i+1);
    if(q>n) {printf("Blank, %dn",t[2*i+1]);}
    else {printf("%d, %dn",q,t[2*i+1]);}
    q–;//打印表前
    printf("Sheet %d, back : ",i+1);
    if(q>n) {printf("%d, Blankn",t[2*i+2]);}
    else {printf("%d, %dn",t[2*i+2],q);}
    q–;//打印表后
    }
    }
    }
    return 0;
    }