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;
}

代码解释:

  1. 包含头文件: 代码包含了必要的头文件:iostream用于输入输出,vector用于动态数组,bitset用于处理二进制数,iomanip用于格式化输出。
  2. 获取输入: 程序从用户那里获取一个整数,并将其存储在变量nums中。
  3. 创建魔法数组: 程序创建一个名为lis的二维向量,包含10个向量,用于存储魔法数组。
  4. 迭代数字: 程序使用一个for循环,从1迭代到nums
  5. 转换为二进制: 在循环的每次迭代中,程序使用bitset<32>(i).to_string()将当前数字i转换为32位二进制字符串。
  6. 查找第一个'1': 程序使用l_i.substr(l_i.find('1'))从二进制字符串中提取从第一个'1'开始的子字符串。
  7. 填充魔法数组: 程序使用嵌套的for循环遍历提取的二进制字符串,并将当前数字i添加到对应的魔法数组中。
  8. 打印魔法数组: 程序使用嵌套的for循环迭代lis向量,并打印所有非空的魔法数组。

示例输出:

如果输入是10,程序将输出以下魔法数组:

第1个魔法数组
    1    2    4    8

第2个魔法数组
    3    5    6    9

第3个魔法数组
    7

结论:

这个C++程序演示了一种根据其二进制表示中'1'的位置生成'魔法数组'的简单方法。代码清晰简洁,易于理解和修改,以满足特定需求。

C++魔法数组生成器:根据二进制中'1'的位置分组

原文地址: https://www.cveoy.top/t/topic/cIzp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录