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\) 次了
就这样,拜拜

浙公网安备 33010602011771号