这题本身不难,求给出数据两两之间的最小公倍数,然后在其中找出最大的公倍数即可。
坑点 其实是这题数据录入不止是没有给个数,而且数据之间空格是任意个的(比如:"1 2 3"的原数据为"1 2 3 ")因此,通过scanf("%d")之后getchar() 去判断换行符和空格符就会造成错误,确实很坑哈哈。
正确写法的话可以靠控制c或c++的输入流,使用c++的stream以及字符转换来避免这些不标准的空格造成影响。这些方法网上很多,不列举。这里给出的是字符转换的方法。
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include <algorithm>
using namespace std;
int gcd(int a,int b) {
int c;
while(b>0) {
c=a%b;
a=b;
b=c;
}
return a;
}
int num[10000];
int main() {
char qaq;
int n,i,Max=1;
scanf("%d",&n);
getchar();
while(n--) {
i=0;
Max=1;
int sum=0;
while((qaq=getchar())!='\n') {
if(qaq!=' ') {
sum*=10;
sum+=qaq-'0';
} else {
if(sum==0)
continue;
else
num[i++]=sum;
sum=0;
}
}
if(sum!=0)
num[i++]=sum;
//printf("i=%d\n",i);
for(int s=0; s<i; s++) {
for(int s2=s+1; s2<i; s2++) {
Max=max(Max,gcd(num[s],num[s2]));
}
}
printf("%d\n",Max);
}
return 0;
}