传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3844
已知n个数,每次操作将最大的数a和最小的数b都替换为a-b,进行若干次操作,直到所有的数都一样,求操作数,或者无解
。。。这个一定有解,所以就模拟就行了
代码如下:
#include<cstdio>
using namespace std;
int n,T;
int s[15];
bool get()
{
for (int i=2;i<=n;i++)
{
if (s[i]!=s[i-1])
{
return 0;
}
}
return 1;
}
int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&s[i]);
}
int l,r,temp;
while (1)
{
if (get())
{
break;
}
l=r=1;
for (int i=1;i<=n;i++)
{
if (s[i]<s[l])
{
l=i;
}
if (s[i]>s[r])
{
r=i;
}
}
temp=s[r]-s[l];
s[l]=s[r]=temp;
}
printf("%d\n",s[1]);
}
return 0;
}