想知道我的代码哪里还有逻辑漏洞,又一个很长、正负相交的样例过不了。
题目描述
被除数n和除数d之间的整数除运算产生商q和余数r。q是最大化qd的整数,使得qd≤n,并且r=n−q*d。
给出一组整数,存在一个整数d,使得每个给出的整数除以d,所得的余数相同。
输入输出格式
输入格式
输入的每行给出一个由空格分隔的非零整数序列。每行的最后一个数字是0,这个0不属于这一序列。一个序列中至少有2个,至多有1000个数字;一个序列中的数字并不都是相等的。输入的最后一行给出单个0,程序不用处理该行。
输出格式
对于每一行输入,输出最大的整数,使得输入的每一个整数除以该数,余数相同。
#include <stdio.h>
#include<math.h>
int gcd(int a,int b);
int main()
{
int n=0,i=0,k=0,t=0,max=0,min=0;
int a[1001]={0},b[1000]={0};
while(scanf("%d",&a[n])!=EOF)
{
//printf("%d\n",a[n]);
if(a[0]==0) {n=0;i=0;continue;}
if(a[n]==0) {printf("%d\n",t);n=0;i=0;continue;}//一个样例结束
if(n>0)
b[i]=abs(a[n]-a[n-1]);//一阶差序列;绝对值
if(i>0)
{
if(b[i]>=b[i-1])
{max=b[i];min=b[i-1];}
else
{max=b[i-1];min=b[i];}
t=gcd(max,min);//a>b
}
i++;
n++;
}
return 0;
}
int gcd(int a,int b)
{
//printf("%d %d\n",a,b);
if(b==0)
return(a);
else
gcd(b,a%b);
}