程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [hdu-2046] 骨牌鋪方格

[hdu-2046] 骨牌鋪方格

編輯:C++入門知識

骨牌鋪方格

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 27095 Accepted Submission(s): 13089

Problem Description 在2×n的一個長方形方格中,用一個1× 2的骨牌鋪滿方格,輸入n ,輸出鋪放方案的總數.
例如n=3時,為2× 3方格,骨牌的鋪放方案有三種,如下圖:
\
Input 輸入數據由多行組成,每行包含一個整數n,表示該測試實例的長方形方格的規格是2×n (0
Output 對於每個測試實例,請輸出鋪放方案的總數,每個實例的輸出占一行。

Sample Input
1
3
2

Sample Output
1
3
2

分析:

1、n 張牌可以由 n - 1 張牌後面再加一張豎著放的牌得到,還可以由 n - 2 張牌後面再加兩張牌得到。

2、n - 2 張牌後面再加兩張牌的情況只能是加兩張橫著放的,如果加兩張豎著放的牌會和“ n - 1 張牌後面再加一張牌”的情況重復。

3、綜上所述,f ( n ) = f ( n - 1 ) + f ( n - 2 ) 斐波那契數列!

import java.util.Scanner;

public class Main {

	static long[] nums = new long[51];

	static {
		nums[1] = 1;
		nums[2] = 2;
		for (int i = 3; i < 51; i++) {
			nums[i] = nums[i - 1] + nums[i - 2];
		}
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		while (scanner.hasNext()) {
			int n = scanner.nextInt();
			
			System.out.println(nums[n]);
		}
	}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved