GESP认证C++编程真题解析 | B4004 寻找倍数

学习C++从娃娃抓起!记录下CCF-GESP备考学习过程中的题目,记录每一个瞬间。

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目描述】

小杨有一个包含n个正整数的序列 A = [ a 1 , a 2 , … , a n ] A=[a_1, a_2, \dots, a_n] A=[a1,a2,,an],他想知道是否存在 i ( 1 ≤ i ≤ n ) i(1\le i\le n) i(1in)使得 a i a_i ai是序列A中所有数的倍数。

【输入】

第一行包含一个正整数t,代表测试用例组数。

接下来是t组测试用例。

对于每组测试用例,一共两行。其中,第一行包含一个正整数n;第二行包含n个正整数,代表序列A。

【输出】

对于每组测试用例,如果存在 i ( 1 ≤ i ≤ n ) i(1\le i\le n) i(1in)满足对于所有在 k ( 1 ≤ k ≤ n ) k(1\le k\le n) k(1kn) a i a_i ai a k a_k ak的倍数,输出Yes,否则输出No。

【输入样例】

2
3
1 2 4
5
1 2 3 4 5

【输出样例】

Yes
No

【代码详解】

《洛谷 B4004 寻找倍数》 #数学# #枚举# #数组# #GESP# #2024#

#include 
using namespace std;
const int N = 1e5+10;
int a[N];
int main()
{
    int t;
    cin >> t;
    while (t--) {  //t组测试数据
        int n;
        cin >> n;  //每组n个数
        int x = 0;  //x存该组数中的最大值
        for (int i=1; i<=n; i++) {  //输入数据,找最大值
            cin >> a[i];
            x = max(x, a[i]);
        }
        int fl = 0;  //标志变量
        for (int i=1; i<=n; i++) {  //遍历数组元素
            if (x % a[i])  // 如果x不是a[i]的倍数
                fl = 1;  //改变标志变量的值
        }
        if (fl) cout << "No" << endl;
        else cout << "Yes" << endl;
    }  
    return 0;
}

【运行结果】

2 
3
1 2 4
Yes
5
1 2 3 4 5 
No

你可能感兴趣的:(c++,开发语言)