您的位置:首页 > 产品设计 > UI/UE

hdu1005 Number Sequence

2015-11-04 20:07 302 查看
第一次写博客、、、之所以写上这道题是因为真的真的为这道题纠结了很久,抓狂!!!!!

其实这道题就是找规律了,f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7,f(n)肯定是0~6了,循环一下找一下周期就出来。

我第一次的代码其实是这样的:

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
int a,b,n,f[100],m;
f[1] = 1;
f[2] = 1;
while(scanf("%d%d%d",&a,&b,&n)&&(a||b||n))
{
for(int i = 3;i<100;i++)
{
f[i] = (a*f[i-1]+b*f[i-2])%7;
if(f[i-1]==1&&f[i]==1)
{
m = i-2;
break;
}
}
f[0] = f[m];
printf("%d\n",f[n%m]);
}
return 0;
}

然后WA了无数次!于是思考会不会是哪一组数据造成了后面的f数组的值都一样,果然作为大龄ACMer我还是太年轻了。

然后改成这样:

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
int a,b,n,f[100],m;
f[1] = 1;
f[2] = 1;
while(scanf("%d%d%d",&a,&b,&n)&&(a||b||n))
{
int i;
for(i = 3;i<100;i++)
{
f[i] = (a*f[i-1]+b*f[i-2])%7;
if(f[i-1]==1&&f[i]==1)
{
break;
}
}
m = i-2;
f[0] = f[m];
printf("%d\n",f[n%m]);
}
return 0;
}

把m = i-2提到循环外面就A了,举个例子、当输入7 7 x的时候、、、、f数组变成了1,1,0,0,0,0,0,0,0…

这样还是有问题的,不过能过hdu数据,把m设为大于100,000,000的值

好吧、第一篇博客就献给了hdu1005
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu1005 代码 博客