完美区间C语言runtime error问题搞不明白

题目描述
序列X由线性产生式 xn=axn−1+bxn−2,x0=x1=1 产生,
序列Y由线性产生式 yn=cyn−1+dyn−2,y0=y1=1 产生,
集合Z={x+y∣x∈X,y∈Y}。
现有区间[L,R],求最长的子区间[l,r],满足L≤l≤r≤R,∀z∈[l,r],z∈Z。
输入格式
第一行是一个整数T(1≤T≤1000),表示样例的个数。 每个样例占一行,为6个整数,a,b,c,d,L,R,其中1≤a,b,c,d,L,R≤109
输出格式
依次每个样例,输出最长的子区间的长度,为一个整数。 如果不存在这样的区间,输出0。
样例输入
3
1 1 1 1 1 10
1 1 1 1 1 15
1 1 1 1 12 12
样例输出
9
10
0

#include <stdio.h>
#include <math.h>
#include <string.h>
int kk[55];
int aa[55];
int okb[3605];
int bb[3605];
int p=0;
int L,R;
void fei1(int a,int b){
    //puts("1"); 
    kk[0]=1,kk[1]=1;
    int i=1;
    while(kk[i]<=R){
        i++;
        kk[i]=a*kk[i-1]+b*kk[i-2];
        //printf("%d ",kk[i]);
    }
}//数列X 
void fei2(int c,int d){
    //puts("2");
    aa[0]=1,aa[1]=1;
    int i=1;
    while(aa[i]<=R){
                i++;
        aa[i]=c*aa[i-1]+d*aa[i-2];

    }
    //puts("2.1");
}//数列Y 
void fei3(){
    //puts("3");
    p=0;
    for(int i=0;i<55;i++){
        if(kk[i]==0) break;
        for(int j=0;j<55;j++){
            if(aa[j]==0) continue;
            okb[p]=kk[i]+aa[j];
            //printf("%d ",okb[p]);
            p++;            
        }
    }
    //puts("");
}//数列Z 
void paixu(){
    //puts("4");
//    for(int i=0;i<p;i++){
//        printf("%d ",okb[i]);
//    }
//    puts("");
    for(int i=0;i<p;i++){
        for(int j=i+1;j<p;j++){
            if(okb[i]==okb[j]) {
                //puts("做了"); 
                for(int k=j+1;k<p;k++){
                    bb[k]=okb[k];
                }
                for(int k=j+1;k<p;k++){
                    okb[k-1]=bb[k];
                }
                p--;
                j--;
            }
        }
    }
//    for(int i=0;i<p;i++){
//        printf("%d ",okb[i]);
//    }
//    puts("");
    for(int i=0;i<p-1;i++){
        for(int j=0;j<p-i-1;j++){
            if(okb[j]>okb[j+1]){
                int temp;
                temp=okb[j];
                okb[j]=okb[j+1];
                okb[j+1]=temp;
            }
        }
    }
//        for(int i=0;i<p;i++){
//        printf("%d ",okb[i]);
//    }
//    puts("shabi");
}//排序和把相同的数筛去; 
int choose(){
    //puts("5");
    int i=0;
    while(okb[i]<L){
        i++;
    }
    int x=i;
    while(okb[i]<=R){
        i++;
    }
    i--;
    int y=i;
    int max=0,m=0;
    int g=x;
    //printf("%d %d \n",g,y);
    while(g<y-1){
        int f=0;
        for(int j=g;j<=y-1;j++){
            //printf(" %d %d\n",okb[j],okb[j+1]);
            if(okb[j]==okb[j+1]-1) {
                g=j;
                f++;
            }
            else if(okb[j]!=okb[j+1]-1) {
                g=j+1;
                //    puts("1");
                break;
            }
        }
        if(max<f) max=f+1;
        //printf("%d\n",max);
    }
    return max;
    
} 
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int a,b,c,d;
        scanf("%d%d%d%d",&a,&b,&c,&d);
        scanf("%d%d",&L,&R);
        fei1(a,b);
        fei2(c,d);
        fei3();
        paixu();
        printf("%d\n",choose());
        memset(kk,0,sizeof(kk));
        memset(aa,0,sizeof(aa));
        memset(okb,0,sizeof(okb));
        memset(bb,0,sizeof(bb));
    }
} 

运行结果及报错内容

runtime error

代码太长了,我实在不想看,你能不能找到出错位置,然后设置断点,查看相关变量?这是调试的基本方法,一般来说调试可以解决99%的问题