L1-022 奇偶分家 (10 point(s))
-
试着玩了下位运算求奇偶,如果为偶数那么二进制位比如 2 就有 1 0 而与 1 的二进制 0 1 取与运算的时候,得 0 。相反奇数比如 3 二进制为 1 1 & 0 1 = 0 1 。
对更大的数同样成立,所以所以可以写成 if(tmp & 1) odd++ 。
当时还想了想会不会有非奇偶的数,所以用了两个 if 来判断。看了下别人代码同时结合题目条件 “给出N个非负整数” 是不包括 0 的情况的,所以不是奇数就是偶数了,可以用 if-else 判断。
// 位运算
#include <bits/stdc++.h>
using namespace std;
int main(){
int N, tmp, odd = 0, even = 0;
cin >> N;
while(N--){
cin >> tmp;
if(tmp & 1) odd++;
else even++;
}
cout << odd << " " << even;
}
// 取余
#include <bits/stdc++.h>
using namespace std;
int main(){
int N, tmp, odd = 0, even = 0;
cin >> N;
while(N--){
cin >> tmp;
if(tmp % 2 == 1) odd++;
if(tmp % 2 == 0) even++;
}
cout << odd << " " << even;
}