1. 程式人生 > 其它 >P8241 [COCI2013-2014#3] RIJEČI題解

P8241 [COCI2013-2014#3] RIJEČI題解

原題Link

看到這個題,我第一想法就是直接開始找規律,於是,通過列舉,列出來瞭如下的:

(上面的是每按 \(1\) 次,會變換成的樣子,下面的是統計的 \(A\)\(B\) 的個數)

不難發現,從第 \(2\) 次變換開始每一次,\(A\) 的個數會變換成上一組 \(B\) 的個數,而 \(B\) 的個數,會變換成上一組個數總和

那麼,如何證明上述的規律是正確的?

首先,明確一點,題目中所講:

每當他按一次按鈕,螢幕上的字母 B 變為 AB,而字母 A 變為 B。

因此,可以推斷出來的是:

  • \(B\) 的個數就是上一組個數總和(因為上面的一組不管是 \(A\) 還是 \(B\)

    都會變換出來 \(1\)\(B\) 出來,而且僅有 \(1\) 個)

  • \(A\) 只可以由上一組的 \(B\) 變換出來,因此,\(A\) 的個數就是上一組 \(B\) 的個數

因此,可以直接得到程式碼:

#include <iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	int a = 1, b = 0;
	for (int i = 1; i <= n; i++) {
		int na = a, nb = b;
		a = b;
		b = na + nb;
	}
	cout << a << " " << b << endl;
	return 0;
}

唯一需要注意的一點就是一定是從第 \(1\) 次開始迴圈的,不要寫成第 \(2\) 次了

就這樣,拜拜