我想从以下输入压缩二维数组
Enter the array size (rowSize, colSize):
4 4
Enter the matrix (4x4):
1 1 1 0
0 0 1 1
1 1 1 1
0 0 0 0
指定了1和0的数量。
compress2D():
1 3 0 1
0 2 1 2
1 4
0 4
以下是我的代码
void compress2D(int data[SIZE][SIZE], int rowSize, int colSize)
{
int i , j , counter = 0, tempInt = data[0][0];
for (i = 0 ; i < rowSize ; i++)
{
for (j = 0 ; j < colSize ; j++ )
{
if (data[i][j] == tempInt)
counter++ ;
else
{
printf("%d %d " , tempInt,counter);
tempInt = data[i][j];
counter = 1;
}
}
if(counter!=0)
printf("%d %d",tempInt, counter);
counter = 0 ;
printf("\n");
}
}
然而这是我的输出
compress2D():
1 3 0 1
0 2 1 2
1 4
1 0 0 4
所有输入都是二进制
任何帮助将不胜感激!
答案 0 :(得分:2)
您可以使用以下代码。看到它正常工作here:
void compress2D(int data[SIZE][SIZE], int rowSize, int colSize)
{
int i , j , counter, tempInt;
for (i = 0 ; i < rowSize ; i++)
{
tempInt = data[i][0];
counter = 1;
for (j = 1 ; j < colSize ; j++ )
{
if (data[i][j] == tempInt)
counter++ ;
else
{
printf("%d %d " , tempInt,counter);
tempInt = data[i][j];
counter = 1;
}
}
if(counter)
printf("%d %d",tempInt, counter);
printf("\n");
}
}
注意:在OP的最后评论( 0 1 1 2 0 1
之后更新,在某些情况下输出将比输入本身更长。)
答案 1 :(得分:1)
如评论中所述,每次开始新行时都需要重置tempInt
void compress2D(int data[SIZE][SIZE], int rowSize, int colSize)
{
int i, j, counter = 0, tempInt = data[0][0];
for (i = 0; i < rowSize; i++)
{
tempInt = data[i][0]; // <--------
for (j = 0; j < colSize; j++)
{
if (data[i][j] == tempInt)
counter++;
else
{
printf("%d %d ", tempInt, counter);
tempInt = data[i][j];
counter = 1;
}
}
if (counter != 0)
printf("%d %d", tempInt, counter);
counter = 0;
printf("\n");
}
}