杭电1005它说我Runtime Error(INTEGER_DIVIDE_BY_ZERO),可是我怎么也找不出来哪里除零了。

帮我找找。改下。谢谢。#include<iostream>#include<string>usingnamespacestd;main(){inta,b,i,t;intf... 帮我找找。改下。谢谢。

#include<iostream>
#include<string>
using namespace std;
main()
{
int a,b,i,t;
int f[3600];
long n;
while(cin>>a>>b>>n)
{
memset(f,0,sizeof(f));
if(a==0&&b==0&&n==0)
break;
f[2]=1;f[1]=1;
for(i=3;i<50;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i]==f[i-1]&&f[i]==1)
{
t=i-2;
break;
}
}
if(n%t!=0)
t=n%t;
cout<<f[t]<<endl;
}
}
展开
 我来答
he5803320
2013-03-14
知道答主
回答量:13
采纳率:0%
帮助的人:12.1万
展开全部
i<50 应改成 i<51,因为虽然只有49种排列,但你要比较的是一对数,所以要加多 1。
改之后还是不行,因为 1,1 可能不在循环的队列中。
#include <stdio.h>
#include <algorithm>
#define N 520
int A, B, n;
int b, e;
int a[N];
void init()
{
int i, j;
a[1] = 1;
a[2] = 1;
for(i=3; i<500; i++)
{
a[i] = (A*a[i-1] + B*a[i-2]) % 7;
for(j=1; j<i-1; j++)
if(a[i]==1 && a[i-1]==1)
{
if(a[j] == a[i-1] && a[j+1] == a[i])
{
b = j;
e = i-2;
return ;
}
}
}
}
int main()
{
while(scanf("%d%d%d", &A, &B, &n) && n)
{
init();
if(n<=e)
printf("%d\n", a[n]);
else
{
int _x = (n-b)%(e-b+1)+b;
printf("%d\n", a[_x]);
}
}
return 0;
}

另一种能通过的 方法:
#include <iostream>
#include <cstring>
using namespace std;
int f[52];
int main()
{
int a,b,n;
while(cin>>a>>b>>n)
{
if(a==0&&b==0&&n==0)
break;
f[1]=1;
f[2]=1;
int xh=0;
int i;
for(i=3;i<50;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i]==1&&f[i-1]==1)
{
break;
}
}
xh=i-2;
n=n%xh;
if(n==0)n=xh;
cout<<f[n]<<endl;
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2012-02-06 · TA获得超过7223个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1884万
展开全部
会不会出现t=0的情况
你试试看if(t==0)while(1);看看会不会超时
if(n%t!=0)
t=n%t;
更多追问追答
追问
你试试看if(t==0)while(1);看看会不会超时
这句话什么意思? 加在哪里? 还有t=i-2;i是从3开始循环的,t不会等于0吧。
追答
#include
#include
using namespace std;
main()
{
int a,b,i,t;
int f[3600];
long n;
while(cin>>a>>b>>n)
{
memset(f,0,sizeof(f));
if(a==0&&b==0&&n==0)
break;
f[2]=1;f[1]=1;
for(i=3;i<50;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i]==f[i-1]&&f[i]==1)
{
t=i-2;
break;
}
}
if(t==0)while(1);//加这里
if(n%t!=0)
t=n%t;
cout<<f[t]<<endl;
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式