C++魔法数组生成器:根据二进制中'1'的位置分组
C++魔法数组生成器:根据二进制中'1'的位置分组
这篇文章介绍了一个C++程序,它生成'魔法数组'。程序接受一个整数作为输入,并根据其二进制表示中'1'的位置创建数组。
代码:
#include <iostream>
#include <vector>
#include <bitset>
#include <iomanip>
using namespace std;
int main() {
int nums;
cin >> nums;
vector<vector<int>> lis(10);
for (int i = 1; i <= nums; i++) {
string l_i = bitset<32>(i).to_string();
l_i = l_i.substr(l_i.find('1'));
for (int j = l_i.length() - 1, k = 0; j >= 0; j--, k++) {
if (l_i[j] == '1') {
lis[k].push_back(i);
}
}
}
int times = 1;
for (vector<int>& i : lis) {
if (!i.empty()) {
int zhi = 1;
if (times != 1) {
cout << endl;
}
cout << '第' << times << '个魔法数组' << endl;
for (int j : i) {
cout << setw(5) << j;
zhi++;
if (zhi > 4) {
cout << endl;
zhi = 1;
}
}
times++;
cout << endl;
} else {
break;
}
}
return 0;
}
代码解释:
- 包含头文件: 代码包含了必要的头文件:
iostream用于输入输出,vector用于动态数组,bitset用于处理二进制数,iomanip用于格式化输出。 - 获取输入: 程序从用户那里获取一个整数,并将其存储在变量
nums中。 - 创建魔法数组: 程序创建一个名为
lis的二维向量,包含10个向量,用于存储魔法数组。 - 迭代数字: 程序使用一个
for循环,从1迭代到nums。 - 转换为二进制: 在循环的每次迭代中,程序使用
bitset<32>(i).to_string()将当前数字i转换为32位二进制字符串。 - 查找第一个'1': 程序使用
l_i.substr(l_i.find('1'))从二进制字符串中提取从第一个'1'开始的子字符串。 - 填充魔法数组: 程序使用嵌套的
for循环遍历提取的二进制字符串,并将当前数字i添加到对应的魔法数组中。 - 打印魔法数组: 程序使用嵌套的
for循环迭代lis向量,并打印所有非空的魔法数组。
示例输出:
如果输入是10,程序将输出以下魔法数组:
第1个魔法数组
1 2 4 8
第2个魔法数组
3 5 6 9
第3个魔法数组
7
结论:
这个C++程序演示了一种根据其二进制表示中'1'的位置生成'魔法数组'的简单方法。代码清晰简洁,易于理解和修改,以满足特定需求。
原文地址: https://www.cveoy.top/t/topic/cIzp 著作权归作者所有。请勿转载和采集!