布阵

黑暗军团在城外的草地上布阵,如果把草地划分成很多大小一样的方格,看成无限大的棋盘,军团从中心点出发,每次只能向上或向左或向右移动一步(移动的过程中,走过的格子不能再次进入)。就能到达相邻的一个格子里,如果一共移动了N步,总共有多少种走法呢?

输入
一个整数即N,N≤30。

输出
输出步数。

样例输入
2
样例输出
7

运用递推
这个是找出规律,答案算出来,规律我竟然找了半天

#include <iostream>
#include <algorithm>
using namespace std;
long long ans=0;
int fun(int n,int x,int len)
{
	int a[3]={1,2,3};
	if(len==n){
		ans++;
		return 0;
	}
	for(int i=0;i<3;i++){
		int t;
		if(a[i]!=x){
			if(a[i]==2) t=3;
			else if(a[i]==3) t=2;
			else t=0;
			fun(n,t,len+1);
		}
	}
}
int main()
{
	int n;
	int b[2];
	for(n=1;n<=30;n++){
		ans=0;
	    fun(n,0,0);
	    cout<<ans<<endl;
	}
	return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int n;
	long long a[33]={0,3,7};
	cin>>n;
	for(int i=3;i<=n;i++)
		a[i]=a[i-1]*2+a[i-2];
	cout<<a[n]<<endl;
}

猜你喜欢

转载自blog.csdn.net/weixin_42868863/article/details/85392683