参考程序1
cpp
#include <cstdio> // 提供 scanf 和 printf 的头文件
using namespace std;
int n, v; // n 表示数据个数,v 用于统计所有数据中 1 的个数
int main() {
scanf("%d", &n); // 输入数据个数
for (int i = 1; i <= n; i++) {
int c;
scanf("%d", &c); // 读取一个数据
// 将该数据按位右移,并统计它的二进制表示中 1 的数量
while (c) {
v += c & 1; // 如果最低位是 1,v 加一
c >>= 1; // 右移一位,准备处理下一位
}
}
// 输出两个值:1的总数,和该总数的奇偶性(v&1 = 1 表示奇数,0 表示偶数)
printf("%d %d\n", v, v & 1);
return 0;
}
参考程序2
cpp
#include <cstdio>
using namespace std;
int main() {
int n, v = 0; // v 表示统计所有二进制中 1 的个数
scanf("%d", &n); // 读入数据个数
for (int i = 0; i < n; i++) {
int c;
scanf("%d", &c); // 读入一个整数
while (c > 0) {
if (c % 2 == 1) // 如果最低位为 1,说明是奇数,统计 1
v++;
c = c / 2; // 除以 2,去掉最低位
}
}
printf("%d %d\n", v, v % 2); // 输出总 1 的个数 和 校验码(奇数为 1,偶数为 0)
return 0;
}