HDOJ #2028
因为本题目求的是最小公倍数,那么只需要找到数据的中最大值并对其进行倍数更迭,因为最小公倍数也会是数据中最大值的某一个倍数,那么只需要找到这个倍数就可以找到最小的公倍数。(其实取数据内的任何值都是一样的,只是取最大值的时候后面更迭的次数会少一些,对于大量数据的处理时便于提高效率。)
AC code:
#include<stdio.h>
int arr[10000];
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
long long sum=1, m;
m=0,j=0;
for(i=0; i<n; i++)
{
scanf("%d",&arr[i]);
sum*=arr[i];
}
int max=arr[0];
for(i=0; i<n; i++)
if(max<arr[i])
max=arr[i];//找出最大值,以减少更迭次数
for(i=1; m<=sum; i++)//设定上限为所有数的乘积
{
int flag=1;
m=i*max;//对最大值进行更迭
for(j=0; j<n; j++)
if((m%arr[j])!=0)
flag=0;
if(flag==1)
{
printf("%d\n",m);
break;
}
}//最小公倍数一定为最大值的倍数,所以只需要找到最大值的n倍即可找出最小公倍数。
}
return 0;
}