本人代码:
#include<bits/stdc++.h>
using namespace std;
int a[200],n,k,i,b[200],ans,j;
bool c[200];
int main()
{
cin>>n>>k;
a[1]=1;
a[2]=1;
for(i=3;i<=n;i++)
a[i]=a[i-1]+a[i-2];
i=0;
while (n!=ans)
{
j++;
i++;
if (i>n) i=i-n;
if (c[i]) j--;
if (j==k)
{
c[i]=true;
ans++;
b[ans]=a[i];
j=0;
}
}
for (i=1;i<=ans;i++)
printf("%d",b[i]);
return 0;
}
题目:
某银行保险箱的金钥匙上刻有N和K两个整数,其中N<100且K≤N,根据这两个数,用如下的方法就能算出保险箱的密码,从而可以打开保险箱。
由斐波那契数列1,1,2,3,5,8,13,21……的前N项按顺序组成一个数字环,按数K报数,即从第1个数开始报数,每报数到K的就出列,然后从下一个数开始报数,一直到所有的数都出列为止,出列所组成的一个数字序列就是该保险箱的密码。
索菲现在保留着祖父留下的保险箱的金钥匙,但不知道密码是什么。你能帮他算出来吗?
输入
输入文件numcode.in仅一行,包含两个整数N和K,其中0<K≤N≤100。
输出
输出文件numcode.out只有一行,为保险箱的密码序列。
样例输入
8 3
样例输出
2815121313