题解
2023-11-27 19:11:29
发布于:浙江
51阅读
0回复
0点赞
题目要求判断给定的正整数序列a能否通过一系列操作将所有数字变为相同的数字。具体做法如下:
首先,定义一个变量flag,初始化为true,用于记录是否存在与第一个元素不同的元素。
通过for循环遍历序列a的每个元素,从第二个元素开始与第一个元素进行比较。如果存在与第一个元素不同的元素,将flag设置为false,并跳出循环,否则继续比较下一个元素。
在循环结束后,通过判断flag的值,如果flag为true,则输出"Yes"表示可以通过一系列操作使序列a中所有数字变为相同的数;如果flag为false,表示不能通过一系列操作实现要求,输出"No"。
总结来说,代码的做法是检查序列中是否存在与第一个元素不同的元素,如果存在则判断不能通过一系列操作将所有数字变为相同的数字,否则判断可以实现要求。
code:
#include<bits/stdc++.h>
using namespace std;
bool canMakeSame(vector<int>& a) {
int n = a.size();
map<int, int> factors;
for (int i = 0; i < n; i++) {
int num = a[i];
for (int j = 2; j * j <= num; j++) {
while (num % j == 0) {
factors[j]++;
num /= j;
}
}
if (num > 1) {
factors[num]++;
}
}
for (auto it : factors) {
if (it.second != n) {
return false;
}
}
return true;
}
int main() {
int t;
cin >> t;
while (t--) {
bool flag=true;
int n;
cin >> n;
vector<int> a(n);
for (int i=0;i <n; i++) {
cin >> a[i];
}
for(int i=1;i<n;i++){
if(a[i]!=a[0]) flag=false;
}
if(flag==true) cout<<"YES"<<endl;
else if(canMakeSame(a)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
别忘了加入我的团队:中国
这里空空如也
有帮助,赞一个