UVa 10450 - World Cup Noise

题目:构造一个01串,使得其中的1不相邻,问长度为n的串有多少中。

分析:数学,递推数列。

            设长度为n的串有n个,则有递推关系:f(n)= f(n-1)+ f(n-2);

            长度为n的结束可能是0或者1:

            如果结束是0,则前面是0或者是1都可以所以是f(n-1);

            如果结束是1,则前面的必然是0,则更前面的随意,所以是f(n-2);

            这显然是Fib的递推公式,f(n)= Fib(n+1)。

说明:用long long防止溢出。

#include <iostream>
#include <cstdlib>

using namespace std;

long long Fib[100];

int main()
{
	Fib[1] = Fib[0] = 1LL;
	for (int i = 2 ; i < 55 ; ++ i)
		Fib[i] = Fib[i-1]+Fib[i-2];
	
	int n,m;
	while (cin >> n) 
	for (int i = 1 ; i <= n ; ++ i) {
		cin >> m;
		cout << "Scenario #" << i << ":\n" << Fib[m+1] << "\n\n";
	}
		
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值