【杭电oj】杭电ACM1019ProblemDescriptionThelea...

发布时间:2021-04-03 21:15:44

【杭电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;
  }
以上问题属网友观点,不代表本站立场,仅供参考!