题意:求数列......1,2,1,3,2,3,1,4,3,5,2,5,3,4,1...第n项。
题解:通过观察等数字1的下标,1,3,7,15我们发现都是2的幂次方-1,我们如果在把下标加1,那么发现a[2*n]=2*a[n].且
a[2*n+1]=a[n]+a[n+1]。a[3]=2,a[2]=1,那么a[1]=1。于是数列就变成1,1,2,1,3,2,3,1,4,3,5,2,5,3,4,1...通项公式为
a[2*n]=2*a[n]
a[2*n+1]=a[n]+a[n+1]
递归搞一下就行了。
#include <stdio.h>
typedef long long ll;
ll dfs(ll n)
{
if(n==1) return 1;
if(n&1) return dfs(n/2)+dfs(n/2+1);
else return dfs(n/2);
}
int main()
{
ll n;scanf("%lld",&n);
n++; //因为前面补了一个1,所以下标+1。
printf("%lld\n",dfs(n));
return 0;
}