hdoj-1005Number Sequence

参考:https://blog.csdn.net/u014174811/article/details/41598267

谢谢原博主的思路

这道题乍一看,嘿真tm简单

递归就好了

然后嗯……………………,编译器运行成功,oj上一直不给ac

想了半天也没相出啥结果了,

后来上csdn上查了下

才知道这题是有规律可循的

直接上代码

#include<stdio.h>
int main()
{
	int a,b,n;
	while(scanf("%d%d%d",&a,&b,&n)&&((a!=0)||(b!=0)||(n!=0)))
	{
		int f[50];
		f[1]=1;
		f[2]=1;

		if(n>2)
		 {
		  int i,H;
		  for(i=3;i<=49;i++)
		     {
		      f[i]=(a*f[i-1]+b*f[i-2])%7;
		     }
		  H=f[n%49];//然后我发现了一个可怕的东西,我把49改成48,尽然也能ac
		  printf("%d\n",H);
        }
		else if(n==1)
		  {
			printf("%d\n",f[1]);
		  }
		else if(n==2)
		 {
			printf("%d\n",f[2]);
		 }
	}
}

这里 mod7 总共就是7种情况 0 1 2 3 4 5 6

f(n)的取值只与a,b,f(n-1),f(n-2)有关,a,b是参数,不需要考虑,

只考虑f(n-1),f(n-2)

又因为每个f(n)的值都在 0 1 2 3 4 5 6之间

所以f(n-1),f(n-2)之间只有7*7=49种

所以数组f(n)每49个数必定有循环

注:我把代码里的49改成48尽然也能ac,我很迷呀!!!


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值