求数列......1,2,1,3,2,3,1,4,3,5,2,5,3,4,1...第n项
2018-03-26 22:01
225 查看
题意:求数列......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
.且
a[2*n+1]=a
+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
a[2*n+1]=a
+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;
}
题解:通过观察等数字1的下标,1,3,7,15我们发现都是2的幂次方-1,我们如果在把下标加1,那么发现a[2*n]=2*a
.且
a[2*n+1]=a
+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
a[2*n+1]=a
+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;
}
相关文章推荐
- c语言 数列1,1,2,3,5,8,13,21,34...求第n项
- 斐波那契数列的第N项
- 定义Fibonacci数列如下: / 0 n=0 f(n)= 1 n=1 \ f(n-1)+f(n-2) n=2 输入n,用最快的方法求该数列的第n项。
- 斐波那契数列的第n项。
- 斐波那契数列,用最快的方法求该数列的第n项
- 斐波那契数列求第N项的值
- ppt Fibonacii数列的第n项------普通递归
- 斐波那契数列第n项求余
- ppt Fibonacii数列的第n项------记忆式搜索
- 二分法矩阵求斐波那契(fibonacci)数列第n项
- ppt Fibonacii数列的第n项------动态规划DP
- 斐波那契数列的第N项(1≤n≤10^18 矩阵快速幂)
- 斐波那契数列的第N项 矩阵快速幂
- Java 递归 斐伯那挈数列 第N项
- 19.Fibonacci数列,输入n,用最快的方法求该数列的第n项
- 求数列s(n)=s(n-1)+s(n-2)的第n项的值。其中s(1)=s(2)=1。要求任意给定n,输出s(n)
- 由递推公式求数列第n项的值/山理工ACM-1689斐波那契?
- 关于数列1,1,2,3,5,8,13,21,34..用C#语言编程求第n项为?
- 某数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,... 输出此数列第n项值 递归
- java实现斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39