我想做的是,
例如,假设宽高分别为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/