魔法数组生成器:根据二进制位划分数字

本文介绍一个有趣的算法问题:魔法数组生成器。该算法接受一个正整数 nums 作为输入,并生成一系列“魔法数组”。每个魔法数组都包含一组数字,这些数字的二进制表示中,'1' 出现在相同的位置。

例如,输入 nums = 5,生成的魔法数组如下:

  • 第1个魔法数组: 1, 3, 5* 第2个魔法数组: 2, 3

Python 实现

以下 Python 代码实现了魔法数组生成器:pythonnums = int(input())lis = [[] for i in range(10)]for i in range(1, nums + 1): l_i = str(bin(i)) for j, k in zip(l_i[::-1][:-2], range(1000)): # print(j, k, i) if j == '1': lis[k].append(i)# print(lis)times = 1for i in lis: if i: zhi = 1 print() if times != 1 else None print(f'第{times}个魔法数组') for j in i: print('{:>5}'.format(j), end='') zhi += 1 if zhi > 4: print() zhi = 1 times += 1 print() else: break

C++ 实现

以下是等效的 C++ 代码:cpp#include #include #include 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 << '{:>5}' << j;                zhi++;                if (zhi > 4) {                    cout << endl;                    zhi = 1;                }            }            times++;            cout << endl;        } else {            break;        }    }

return 0;}

这段 C++ 代码使用了 vector 容器来存储生成的魔法数组,并将整数转换为二进制字符串后提取出其中的 '1',最后根据规则将对应的数字存储在相应的魔法数组中。

总结

本文介绍了如何使用 Python 和 C++ 实现魔法数组生成器。该算法简单易懂,但可以应用于各种场景,例如数据分组和模式识别。

魔法数组生成器:根据二进制位划分数字

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

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