Java教程

五一劳动之第三题

本文主要是介绍五一劳动之第三题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目链接:https://vjudge.net/contest/436484#problem/C
这道题首先给出了一个数列,有一种操作的方法是,如果两个数的最大公因数等于这个数列中的最小数,那么两个数就可以交换位置,然后题目给出一个数列,问你可不可以通过操作将数列变为升序的数列。
首先我们将给出的数列进行升序排序,这样不仅可以确定最小值,也可以得到最终的升序数列,再将升序数列与原数列进行比较,将不同的项保留。最后在判断,每一个不同项是否是数列最小值得倍数。
代码如下:

include

include

using namespace std;
int a[100005],b[100005],c[100005];
int main()
{
int t;
cin>>t;
while(t--){
int n,cnt=0;
bool judge=true;
cin>>n;
for(int i=0;i<n;++i){
cin>>a[i];
b[i]=a[i];
}
sort(b,b+n);
for(int i=0;i<n;++i){
if(a[i]!=b[i]){
c[cnt++]=a[i];
}
}
for(int i=0;i<cnt;++i){
if(c[i]%b[0]!=0){
cout<<"NO"<<endl;
judge=false;
break;
}
}
if(judge)cout<<"YES"<<endl;
}
return 0;
}

这篇关于五一劳动之第三题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!