我有一个二维(3x7)数组,我想转换成一维数组,这样我提供的行就在中心。行值可能会有所不同,但必须位于中心位置。
#define numRows 3
#define numCols 7
#define TotalNum 21
int arr[numRows-1][numCols-1] =
{ {0,1,2,3,4,5,6}, {7,8,9,10,11,12,13}, {14,15,16,17,18,19,20} };
int stack[TotalNum-1];
stackup(arr,stack,row);
void stackup(int *p,int *s,int &row1)
{
int k =0;
for(int i = 0; i<numRows; i++)
{
for(int j = 0; j<numCols; j++)
{
s[k] = p[i][j];
k++;
}
}
}
函数stackup肯定是错误的,需要进行调整,但我不知道如何调整它,以便在推入堆栈时提供的行位于中心。
答案 0 :(得分:1)
#define numRows 3
#define numCols 7
#define TotalNum (numRows*numCols)
void stackup(int **p,int *s,int row1)
{
int k = 0,t;
int middle = (numRows-1)/2;
for (int i = 0; i<numRows; i++) {
t=i;
if (i==middle || i==row1)
i = (i==row1)?middle:row1;
for (int j = 0; j<numCols; j++)
s[k++] = p[i][j];
i=t;
}
}
基本上将“p”中的所有元素逐行添加到“s”中。当中间行的时间时,将添加row1中的元素。当添加row1的元素时,会添加中间行的元素。