这道题目如果是暴力肯定不行,标签是入门,看着是个数学题。
如何判断两个数的积是 \(4\) 的倍数呢?
- 两个数中其中一个数含有因数 \(4\)
- 两个数的积中含有因数 \(4\),即两个数都是 \(2\) 的倍数(但这两个数都不含因数 \(4\))
所以我们只要边读入边把 \(4\) 的倍数和是 \(2\) 的倍数但不是 \(4\) 的倍数的个数分别计入 \(sum1\) 和 \(sum2\) 中。
注意:这里的判断倍数有先后顺序,要用 else if
。
得到了 \(sum1\) 和 \(sum2\) 后,\(2\) 的倍数需要两两配对才能组成 \(4\) 的倍数,所以要 \(sum \div 2\),而 \(4\) 的倍数可以与其他任何数配对,所以没有要求,直接加上就可以了,\(sum1 + sum2\) 就是总的配对组数,如果组数大于 \(n \div 2\),输出 Yes
,否则输出 No
。
代码见下
#include <bits/stdc++.h>
using namespace std;
int n, num, sum1, sum2;
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &num);
if(num % 4 == 0) sum1++;
else if(num % 2 == 0) sum2++;
}
if(sum2 / 2 + sum1 >= n / 2) printf("Yes");
else printf("No");
return 0;
}