【数学】 放置石子 题解
题目
解题思路
找规律
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
0 | 1 | 2 | 3 | 5 |
1 | 2 | 3 | 5 | 8 |
2 | 3 | 5 | 8 | 13 |
3 | 4 | 7 | 11 | 18 |
4 | 5 | 9 | 14 | 23 |
1 | 1 | 2 | 3 | 5 |
最后一行是这一列中两两之间的差
可以发现每一行两两之间是第一项的数*这一列的差+上一列的差
代码
#include <iostream>
#include <cstdio>
using namespace std;
long long a, x, b;
long long f[30];
int main() {
freopen("kela.in", "r", stdin);
freopen("kela.out", "w", stdout);
f[1]=f[2]=1;
for (int i=3;i<=30;i++)
f[i]=f[i-1]+f[i-2];
while (cin>>a>>x>>b)
{
long long t=x-f[a-1];
if (t%f[a]!= 0) {
cout <<-1<< endl;
continue;
}
t/=f[a];
cout<<f[b-1]+t*f[b]<<endl;
}
}