P1011 [NOIP1998 提高组] 车站

#include<stdio.h>
int main(void)
{
	int a, n, m, x,u;
	int numa[21] = { 0,1,0,1,0 };
	int numu[21] = { 0,0,0,0,1 };
	scanf("%d%d%d%d", &a, &n, &m, &x);
	if (x == n)
	{
		printf("%d", 0);
		return 0;
	}
	if (n > 5)
	{
		for (int cnt = 5; cnt < n; cnt++)
		{
			numa[cnt] = numa[cnt - 1] + numa[cnt - 2];
			numu[cnt] = numu[cnt - 1] + numu[cnt - 2];
		}
		int suma = 0, sumu = 0, sum = a;
		for (int cnt = 3; cnt < n; cnt++)
		{
			suma += numa[cnt];
			sumu += numu[cnt];
		}
		u = (m - suma * a - a) / sumu;
		for (int cnt = 3; cnt <= x; cnt++)
		{
			sum += (numa[cnt] * a + numu[cnt] * u);
		}
		printf("%d", sum);
	}
	else
	{
		if (x <= 2)
			printf("%d", a);
		else if (x == 3)
			printf("%d", 2 * a);
		else if (x == 4)
		{
			printf("%d", m);
		}
	}
	return 0;
}

斐波那契数列的应用。

我们就要在每一站的上车人数,下车人数,净上车人数与在车上的人数间发现斐波那契数列的规律。然后就能在净上车人数那里发现有斐波那契数列。

但问题来了,计算机不会解方程,因而我们就把未知量分离,最后手动帮计算机解方程。

而斐波那契数列的处理可以用数组的迭代相加,因而需要将前两项初始化好。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值