#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;
}
斐波那契数列的应用。
我们就要在每一站的上车人数,下车人数,净上车人数与在车上的人数间发现斐波那契数列的规律。然后就能在净上车人数那里发现有斐波那契数列。
但问题来了,计算机不会解方程,因而我们就把未知量分离,最后手动帮计算机解方程。
而斐波那契数列的处理可以用数组的迭代相加,因而需要将前两项初始化好。