这题的难点大致就是读入数据方面了吧。。。
尼玛。。。
一直用不惯C艹的读取系统。。。至今都搞不懂cin啊scanf 啊sscanf 啊gets 啊get 啊getline 啊getchar 啊等等一堆乱七八糟的函数还有后面跟的一队乱七八糟的参数的玩意。。。擦擦擦擦擦擦擦擦擦擦擦。。。
好吧。。。其实可能还是我智商拙计。。。
可是为什么gets那种玩意只能读到char[] 里面啊! 读进string里面会屎么!!!! 还得用string str(char [])这种乱七八糟的东西搞进去!!!!【还是我智商拙计么!!!!
吐槽完毕~~~【empty大神、endless大神、甫神 等人请无视上面几段的东西,其实我内心可可热爱它们了~~~
咳咳……
我一开始用的是getline 存进string里面,然后通过while循环,当指针位置的字符不等于空格 的时候,将那个字符 减去‘0’ ,加上之前的数乘以10,这样就得到了一个一个数字。
可是这样会有bug……最后一个数会变成0……天知道为毛为毛为毛为毛为毛为毛!!!
然后用了stringstream, 一个一个读出来。
之后用一个for求出最大的最大公约数就行了……
AC Memory : 0KB Time : 9MS
代码:
#include<cstdio>
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int num[100], n;
string s;
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
int t;
scanf("%d\n", &t);
while (t--)
{
getline(cin, s);
stringstream ss(s);
n = 0;
while (ss >> num[n])
++n;
int i, j, maxn = 0;
for (i = 0; i < n - 1; ++i)
for (j = i + 1; j < n; ++j)
maxn = max(maxn, gcd(num[i], num[j]));
printf("%d\n", maxn);
}
return 0;
}