1043 - 统计方案

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

在一无限大的二维平面中,我们做如下假设:
1、每次只能移动一格;
2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、走过的格子立即塌陷无法再走第二次。
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。

题目输入

首先给出一个正整数C,表示有C组测试数据。
接下来的C行,每行包含一个整数n(n<=20),表示要走n步。

题目输出

请编程输出走n步的不同方案总数;
每组的输出占一行。

输入/输出样例

输入格式

2
1
2

输出格式

3
7

C语言解答

#include<stdio.h>

int main()
{
	int c,n,i,a[20];
	a[0]=3;
	a[1]=7;
	for(i=2;i<20;i++)
		a[i]=a[i-1]*2+a[i-2];
	scanf("%d",&c);
	while(c--)
	{
		scanf("%d",&n);
		printf("%d\n",a[n-1]);
	}
	return 0;
}

C++解答

#include<stdio.h>

int main()
{
	int c,n,i,a[20];
	a[0]=3;
	a[1]=7;
	for(i=2;i<20;i++)
		a[i]=a[i-1]*2+a[i-2];
	scanf("%d",&c);
	while(c--)
	{
		scanf("%d",&n);
		printf("%d\n",a[n-1]);
	}
	return 0;
}

Java解答

import java.util.Scanner;
public class Main{
    public static void main(String arg[]) {
        Scanner cin=new Scanner(System.in) ;   
        int a[]=new int[20];
        a[0]=3;
        a[1]=7;
        for(int i=2;i<20;i++)
             a[i]=a[i-1]*2+a[i-2];
        int c,j;
        c=cin.nextInt();
        while (cin.hasNext())
        {for(int i=0;i<c;i++)
           {j=cin.nextInt();
               System.out.println(a[j-1]);  
           }
        }}}

Python解答

# coding=utf-8
a=int(input())
for i in range(a):
    b=int(input())
    n=1
    m=1
    L=0
    R=0
    for j in range(b):
        L=n+m
        R=n*2+m
        n=L
        m=R
    print(R)