硬币塔问题
一个k级硬币塔从下到上,由1个银币,一个k-1级硬币塔,k个金币,一个k-1级硬币塔,1个银币堆成。0级硬币塔只有一个金币。问n级硬币塔从下向上数i个有几个金币。
0<=n<=40
例:
输入 5 13
输出 6
(我案例的输出不知道为什么都是错的)
我的代码
#include<stdio.h>
long long int counthang(int n);
long long int count(int n);
void jilu(int n,long long int i,long long int *sum);
int main()
{
long long int i,sum=0;
int n;
scanf("%d %lld",&n,&i);
jilu(n,i,&sum);
printf("%lld",sum);
return 0;
}
long long int counthang(int n)
{
if(n==0)
return 1;
else
return 3+2*counthang(n-1);
}
long long int count(int n)
{
if(n==0)
return 1;
else
return n+2*count(n-1);
}
void jilu(int n,long long int i,long long int *sum)
{
if(i<=n)
{
*sum+=0;
}
else
{
long long int num=counthang(n);
if(i>=num-n)
{
*sum+=count(n);
}
else if(i>num/2)
{
*sum+=count(n-1)+n;
jilu(n-1,i-num/2-1,sum);
}
else
{
jilu(n-1,i-1,sum);
}
}
}