c - 如何在C中分隔二维数组中的行

标签 c algorithm multidimensional-array

我想做的是,

例如,假设宽高分别为6和4,二维数组的输入为:

0 1 2 2 1 0
1 0 0 0 0 1
1 0 0 0 0 1
0 1 1 1 1 0

第 2 行以 1 结束,第 3 行以 1 开始,因此“count”变量中的数字增加了它的值,因为它将“1s”视为重复数字。

更具体地说,

这些输入的总输出应该是:

1 2 1(第一行)

1 1(第二行)

1 1(第三行)

4(第4行)

第一行有一个 1 和两个连续的 2 和一个 1,因此它变成 1 2 1。

第二行有两个1,但它们之间没有联系,所以变成1 1。

最后一行有四个连续的1所以变成4。

int main(void) {

int width = 0;
int height = 0;
int input = 0;
int i, j = 0;
int val = 1;

scanf("%d %d", &width, &height);
int board[height][width];

for(i = 0; i < height; i++)
{
    for(j = 0; j < width; j++)
    {
        scanf("%d", &input);
        board[i][j] = input;
    }
}

for(i = 0; i < height; i ++)
{
    val = 1;

    for(j = 0; j < width; j++)
    {

        if(board[i][j]>0)
        {   

            if(board[i][j] == board[i][j+1])
            {

                val++;
                printf("%d ", val); 

            } 

            if(board[i][j+1] == 0)
            {
                val = 1;
            }

            if(board[i][j] != board[i][j+1] && board[i][j] != board[i][j-1])
            {

                val = 1;
                printf("%d ", val);

            }
        }   
    }   

    printf("\n");
}

return 0;
}

这是我到目前为止所做的,但有两个问题...... 使用上面的输入,此代码输出:

1 2 1

1 2

1

2 3 4

第二行似乎有我上面提到的问题,第四行打印出val++的所有过程,而不是val++的最终结果。

最佳答案

显然,您将打印出 val 的进度,因为您在这部分代码中有 printf

        if(board[i][j] == board[i][j+1])
        {

            val++;
            printf("%d ", val); 
        } 

当您真正需要做的只是跟踪最后一个数字的数量以及数字何时更改或到达行尾时,您就已经使代码过于复杂,然后输出计数。可能是这样的:

for(i = 0; i < height; i ++)
{
    val = 0;

    for(j = 0; j < width; j++)
    {
        if(board[i][j]>0)
        {
            if((j==0) || (board[i][j] != board[i][j-1]))
            {
                if(val)
                {
                    printf("%d ", val); 
                }
                val=1;
            }
            else
            {
                val++;
            }
        }   
    }
    if(val)
    {
        printf("%d ", val);
    }
    printf("\n");
}

使用您的示例输入运行它

6 4
0 1 2 2 1 0
1 0 0 0 0 1
1 0 0 0 0 1
0 1 1 1 1 0

输出为

1 2 1 
1 1 
1 1 
4 

关于c - 如何在C中分隔二维数组中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49381275/

相关文章:

c - closedir() 后无效的 free()

C - 串行设备未接收到数据

algorithm - 计算 2 个数组之间的反转

c# - 如何在 C# 中实现点在凸多边形算法中的有效测试?

java - 使用Java方法添加用户元素多维数组

php - 使用 php 从 mysql 构建多维数组

C++:求解三次方程

algorithm - 用代入法解决递归

python - Python中的迭代多维数组

c - 用C语言编写一个递归函数,将数字转换为字符串