【杭电oj】杭电ACM1019ProblemDescriptionThelea...
网友回答
【答案】 首先max=b[0]应该加一个条件,就是说要在k=0的时候才行,否则的话,每次都要对他赋值,这个是没有必要的.(if(k==0) max=b[0];)
其次,你的算法有问题,最小公倍数不是两个数相乘就行了,而是能被两者除尽的最小的那个数.
代码如下:
我修改了你和回答人的代码,并且已经A了
#include stdio.h
long int LCM(int a,int b)//求最小公倍数的函数
{
long int x;
if (a>b)
{
x=a;
while (x%b!=0)
{ //小优化,既然x是a和b的最小公倍数,所以枚举时只要一直加a或b,再判断能否整除另一个数
x+=a;
}
return x;
}
else
{
x=b;
while (x%a!=0)
{
x+=b;
}
return x;
}
}
int main()
{
int m,n,i,j,k;
long int max,a[100],b[100];
scanf(%d\n,&m);
for(i=0;i<m;i++)
{
scanf(%d,&n);
for(j=0;j<n;j++)
scanf(%d,&a[j]);
for(k=1;k<n;k++)
{
a[k]=LCM(a[k],a[k-1]);//计算相连的两个数的最小公倍数,并替换
}
printf(%ld\n,a[k-1]);
}
return 0;
}