注册 登录
编程论坛 C++教室

哪里错了,高手求指点啊!

羽觞 发布于 2012-11-28 21:53, 262 次点击
写了一个程序,提交上去说我时间超限,求高手指点???



#include<stdio.h>
int p( int x)
{
 if(x==1)
  return(1);
 else if(x>1&&x%2==0)
  return(p(x-1)*2);
 else
  return(p(x-1)*3);
 
}

 int main()
{
 int n;
 int k();
 while(scanf("%d",&n)!=EOF)
 {
 if(n==0)
  printf("input data error!\n");
 else
 {
  p(n);
 printf("k(%d)=%d\n",n,p(n));
 
 }
 }

 return 0;

}














4 回复
#2
azzbcc2012-11-28 21:59
代码是对的,可能效率太低了,改改
#3
mmmmmmmmmmmm2012-11-29 09:20
程序代码:
#include<stdio.h>
int p( int x)
{
if(x==1)
  return 1;
else if(x>1&&x%2==0)
  return(p(x-1)*2);
else
  return(p(x-1)*3);

}

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
    if(n==0)
        printf("input data error!\n");
    else
        printf("k(%d)=%d\n",n,p(n));
}
return 0;
}
#4
rjsp2012-11-29 10:14
很显然 f(n) = 6的(n-1)/2次方 乘以 2的(n-1)%2次方
程序代码:
#include <stdio.h>

size_t quick_pow( size_t x, size_t n ) // 快速幂,求x的n次方
{
    size_t r = 1;
    size_t t = x;
    for( ; n; t*=t, n>>=1 )
    {
        if( n&1 )
            r *= t;
    }
    return r;
}

size_t k( size_t n )
{
    return quick_pow(6,(n-1)/2) << ((n-1)&1);
}

int main()
{
    size_t n;
    while( scanf("%d",&n) == 1 )
    {
        if( n == 0 )
            printf( "input data error!\n" );
        else
            printf( "k(%d)=%d\n", n, k(n) );
    }

    return 0;
}

#5
zxd5432012-12-01 00:20
不能AC是一件痛苦的事情
既然是提交 应该发一个链接
1