C++代码中如何将所有数字变体填充到自定义3维数组中?
实现3维数组填充所有数字排列的方法
需求说明
你需要生成的三维数组三个维度刚好对应三位数字的每一位:
- 第一维索引
i:对应三位数的百位,取值范围为0 ~ N - 第二维索引
j:对应三位数的十位,取值范围为0 ~ 1 - 第三维索引
k:对应三位数的个位,取值范围为0 ~ 3
修改要点
- 原代码数组第一维长度需要调整为
N+1,才能覆盖0~N的所有百位取值 - 三重循环内直接通过索引计算给数组元素赋值即可,计算公式为
i*100 + j*10 + k - 输出时加前导零格式化,就能得到你要的
000、001这类展示效果 - 注意:C++标准不支持变长数组(输入变量N作为数组长度),如果需要跨编译器兼容,建议用
vector实现动态数组
可运行代码
兼容原写法版本(依赖编译器对变长数组的扩展支持)
#include <iostream> #include <iomanip> // 用于格式化补前导零 using namespace std; int main () { int N; cin >> N; // 第一维长度改为N+1,覆盖0~N的所有百位取值 int array[N+1][2][4]={0}; for (int i=0; i<=N; ++i) { for (int j=0; j<2; ++j) { for (int k=0; k<4 ; ++k) { array[i][j][k] = i * 100 + j * 10 + k; // 格式化输出为3位,不足补前导零 cout << setw(3) << setfill('0') << array[i][j][k] << endl; } } } return 0; }
符合C++标准的vector实现版本
#include <iostream> #include <iomanip> #include <vector> using namespace std; int main () { int N; cin >> N; // 用vector定义三维动态数组,符合C++标准 vector<vector<vector<int>>> array(N+1, vector<vector<int>>(2, vector<int>(4, 0))); for (int i=0; i<=N; ++i) { for (int j=0; j<2; ++j) { for (int k=0; k<4 ; ++k) { array[i][j][k] = i * 100 + j * 10 + k; cout << setw(3) << setfill('0') << array[i][j][k] << endl; } } } return 0; }
输入N=2运行上述代码,输出就会从000、001一直遍历到213,完全匹配你给出的示例要求。
内容的提问来源于stack exchange,提问作者batat
相关产品推荐
相关产品推荐

