poj2793 孙子问题,麻烦帮我看看到底错哪了,给几个变态的测试数据也可以

由于字数限制,题目我就不粘上来了,题目的网址:http://poj.grids.cn/practice/2793/下面是我的代码:#include<iostream>us... 由于字数限制,题目我就不粘上来了,题目的网址:
http://poj.grids.cn/practice/2793/

下面是我的代码:
#include<iostream>
using namespace std;

bool allIsEqual(int x[],int len1)//判断是否全部相等
{
for(int i=1;i<len1;i++)
{
if(x[0]!=x[i])
{
return false;
break;
}
}
return true;
}

int zdgys(int x,int y)//求最大公约数
{
while(x!=y)
{
if(x>y)
x-=y;
else if(x<y)
y-=x;
}
return x;
}
int len(int x[])//求大整数的位数
{
int i;
for(i=59;i>=0;i--)
{
if(x[i]!=0)
{
i++;
break;
}
}
return i;
}

void liplus(int a[],int b[])//高精度加法
{
for(int i=0;i<59;i++)
{
a[i]+=b[i];
if(a[i]>=10)
{
a[i]-=10;
a[i+1]++;
}
}
}

int mod(int m[],int n)//高精度取模
{
int result=0;
for(int i=59;i>=0;i--)
{
result=(result*10+m[i])%n;
}
return result;
}

void zxgbs(int x[],int y)//求最小公倍数
{
if(mod(x,y)==0)
{
return;
}
else
{
int b[60];
for(int j=0;j<60;j++)
b[j]=x[j];
for(int i=2;i<=y;i++)
{
liplus(x,b);
if(mod(x,y)==0)
return;
}
}
}

int main()
{
int num[60];
int n;
while(cin>>n)
{
if(n==0)
break;
bool lianglianghuzhi=true;
for(int i=0;i<n;i++)
{
cin>>num[i];
}

for(int i=0;i<n-1;i++)//判断是否两两互质
{
for(int j=i+1;j<n;j++)
{
if(zdgys(num[i],num[j])>1)
{
lianglianghuzhi=false;
break;
}
}
if(lianglianghuzhi==false)
break;
}

if(n==1)
cout<<1<<endl;
else if((lianglianghuzhi==false)&&(allIsEqual(num,n)==false))
cout<<"NO"<<endl;
else
{
int result[10][60]={};

if(allIsEqual(num,n)==true)
{
result[0][0]=1;
for(int i=1;i<n;i++)
result[i][0]=num[i];
}
else
{
for(int i=0;i<n;i++)//求出除去某个数剩下的数的最小公倍数,存在result[10][60]里
{
if(i==0)
{
if(num[i]==1)
{
result[i][0]=1;
continue;
}
result[i][0]=num[1]%10;
result[i][1]=num[1]/10;
}
else
{
if(num[i]==1)
{
result[i][0]=1;
continue;
}
result[i][0]=num[0]%10;
result[i][1]=num[0]/10;
}
for(int j=0;j<n;j++)
{
if(j==i)
continue;
zxgbs(result[i],num[j]);
}
}

for(int i=0;i<n;i++)//求出结果
{
int tmp1[60];
for(int k=0;k<59;k++)
tmp1[k]=result[i][k];
while(1)
{
if(mod(result[i],num[i])==1||num[i]==1)
break;
liplus(result[i],tmp1);
}
}
}

for(int i=0;i<n-1;i++)//输出
{
int l=len(result[i]);
for(int j=l-1;j>=0;j--)
cout<<result[i][j];
cout<<" ";
}
int l=len(result[n-1]);
for(int j=l-1;j>=0;j--)
cout<<result[n-1][j];
cout<<endl;
}
}
return 0;
}

交上去老是Wrong Anser,麻烦各位大牛帮忙看看,给几组我这个代码不能得出正确结果的测试数据也可以,给AC代码也可以,大恩不言谢!
以下是我的几组测试数据以及结果:
3 3 5 7
70 21 15
3 5 5 5
1 5 5
5 43 45 46 49 41
166345200 151004476 3887415 14597640 21807450
4 2 4 13 31
NO
5 2 2 2 3 5
NO
4 2 2 3 3
NO
0
请按任意键继续. . .

但貌似这几组测试数据都没发现哪里错了……
展开
 我来答
wangtk1982
2011-02-17 · TA获得超过3742个赞
知道大有可为答主
回答量:3206
采纳率:100%
帮助的人:1423万
展开全部
你的这一组就明显的不对

3 5 5 5
1 5 5

我不懂也没看你的程序
孙子算经里面给出了 70 21 15 是怎么计算出的 呵呵 很简单
小学奥数题 LZ可以上网搜搜看~
whatm22
2011-02-18 · TA获得超过228个赞
知道答主
回答量:198
采纳率:100%
帮助的人:148万
展开全部
我看你基本上都写对了,非常不错

代码中有一个小问题, if(gcd(m,a[i])!=1)break;
这一句导致数据没有读完就break了,后面的测试数据接着读,所以出错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柴什玖科夫斯基
2017-09-03
知道答主
回答量:2
采纳率:0%
帮助的人:1855
展开全部
不互质也有解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
您可能需要的服务
百度律临官方认证律师咨询
平均3分钟响应 | 问题解决率99% | 24小时在线
立即免费咨询律师
13152人正在获得一对一解答
重庆晨曦微光6分钟前提交了问题
重庆晨曦微光6分钟前提交了问题
南昌湖上倒影2分钟前提交了问题
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

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

说明

0/200

提交
取消
还有疑问? 马上咨询32894位在线律师,3分钟快速解答
立即免费咨询律师

辅 助

模 式