DL.2020.03.交替位二进制数 题目描述 给定 N 个正整数,检查它们的二进制表示是否总是 0、1 交替出现:换句话说,就是二进 制表示中相邻两位的数字永不相同。如果满足输出 "true" ,否则输出 "false" 。 输入格式 第 1 行:1 个正整数 N,不超过 10000。 第 2 行:N 个正整数,不超过 1000000000。 输出格式 输出 N 个: true 或 false 。 样例 输入数据 1 2 5 7 输出数据 1 true false 输入数据 2 3 11 12 13 输出数据 2 false false false 样例解释 样例1: 5 的二进制表示是:101 7 的二进制表示是:111。 样例2: 11 的二进制表示是:1011 12 的二进制表示是:1100 13 的二进制表示是:1101。
时间: 2024-03-18 21:40:04 浏览: 63
这道题可以先将每个整数转换成二进制表示,然后检查相邻两位是否相同。下面是一个简单的C++代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
bool checkAlternatingBits(int n) {
int prev = n % 2;
n /= 2;
while (n > 0) {
int cur = n % 2;
if (cur == prev) {
return false;
}
prev = cur;
n /= 2;
}
return true;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
for (int i = 0; i < n; i++) {
if (checkAlternatingBits(nums[i])) {
cout << "true" << endl;
} else {
cout << "false" << endl;
}
}
return 0;
}
```
在这个代码中,我们首先读入整数的数量和每个整数的值。然后,我们使用一个名为 checkAlternatingBits 的函数来检查每个整数的二进制表示是否交替出现。在这个函数中,我们使用一个 while 循环来遍历整数的二进制表示中的每一位,并检查相邻两位是否相同。如果相同,则返回 false。否则,我们将上一位的值更新为当前位的值,并继续迭代。最后,如果所有位都满足条件,则返回 true。
在主函数中,我们遍历每个整数,并打印 true 或 false,具体取决于 checkAlternatingBits 函数的返回值。
阅读全文