You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写程序在二维数组中按垂直模式填充连续数字(跳过0)

二维数组垂直模式替换1为序列值的正确实现

需求:在二维数组中按垂直模式将1替换为1、2、3……直至指定数字,同时跳过值为0的元素。

初始数组:

1 1 1 1 1
1 0 0 1 1 
1 1 0 0 1
1 1 1 0 0

期望替换为1-5后的结果:

1 5 3 5 1
2 0 0 1 2
3 1 0 0 3
4 2 4 0 0

错误尝试分析

尝试1:按行索引取序列值

代码:

int a[4][5] = {{1, 1, 1, 1, 1}, {1, 0, 0, 1, 1}, {1, 1, 0, 0, 1}, {1, 1, 1, 0, 0}};
int sequence[5] = {1, 2, 3, 4, 5};
    
for(int i=0; i<4; i++){
    for(int j=0; j<5; j++){
        if(a[i][j] == 1){
            a[i][j] = sequence[i];
        }
    }
}
    
for(int i=0; i<4; i++){
    for(int j=0; j<5; j++){
        cout << a[i][j] << " ";
    }
    cout << endl;
}   

输出:

1 1 1 1 1
2 0 0 2 2
3 3 0 0 3
4 4 4 0 0

问题:直接用行索引取序列值,同一行的所有1都被替换为相同值,完全没有实现垂直方向的填充逻辑。

尝试2:按行内1的顺序填充

代码:

int a[4][5] = {{1, 1, 1, 1, 1}, {1, 0, 0, 1, 1}, {1, 1, 0, 0, 1}, {1, 1, 1, 0, 0}};
int sequence[5] = {1, 2, 3, 4, 5};
    
for(int i=0; i<4; i++){
    int z = -1;
    for(int j=0; j<5; j++){
        if(a[i][j] == 1){
            z ++;
            a[i][j] = sequence[z];  
        }
    }
}
    
for(int i=0; i<4; i++){
    for(int j=0; j<5; j++){
        cout << a[i][j] << " ";
    }
    cout << endl;
}

输出:

1 2 3 4 5
1 0 0 2 3
1 2 0 0 3
1 2 3 0 0

问题:按行内的1依次填充序列值,是水平方向的填充,不符合需求中的垂直模式。


正确实现

要实现垂直模式填充,核心是按列优先遍历数组:对每一列从上到下遍历,遇到非0元素时,循环使用序列值填充,每填充一个非0元素,计数器自增(超过序列长度时取模循环)。

代码实现:

#include <iostream>
using namespace std;

int main() {
    int a[4][5] = {{1, 1, 1, 1, 1}, {1, 0, 0, 1, 1}, {1, 1, 0, 0, 1}, {1, 1, 1, 0, 0}};
    int sequence[5] = {1, 2, 3, 4, 5};
    const int seq_length = sizeof(sequence) / sizeof(sequence[0]);

    // 按列优先遍历数组
    for (int j = 0; j < 5; j++) {
        int col_count = 0;
        for (int i = 0; i < 4; i++) {
            if (a[i][j] != 0) {
                a[i][j] = sequence[col_count % seq_length];
                col_count++;
            }
        }
    }

    // 输出结果
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 5; j++) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

运行后输出与期望结果一致:

1 5 3 5 1
2 0 0 1 2
3 1 0 0 3
4 2 4 0 0

内容的提问来源于stack exchange,提问作者Lel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:30:51