所以我把这个问题作为家庭作业,我应该采取二维数组输入,然后只排序外边界并打印排序的数组。我制作了程序,它适用于3 * 3和2 * 3矩阵,但是当我输入这个特定的4 * 4数组时,两个数字被加上/减去3。
不知何故,4和11出现而不是7和8,我不知道我做错了什么。我的代码部分涉及下面的排序和排列:
int boundnum = (2 * m) + 2 * (n - 2);
int bounds[] = new int[boundnum];
i = 0;
for(j = 0; j < m; j++, i++)
bounds[i] = a[j][0];
for(j = 0; j < m; j++, i++)
bounds[i] = a[j][n - 1];
for(j = 1; j < n - 1; j++, i++)
bounds[i] = a[0][j];
for(j = 1; j < n - 1; j++, i++)
bounds[i] = a[m - 1][j];
for(i = 0; i < boundnum; i++)
for(j = 0; j < boundnum - 1; j++)
if(bounds[j] > bounds[j+ 1])
{
int temp = bounds[j];
bounds[j] = bounds[j + 1];
bounds[j + 1] = temp;
}
i = 0;
for(j = 0; j < n; j++, i++)
a[0][j] = bounds[i];
for(j = 1; j < m - 1; j++, i++)
a[n - 1][j] = bounds[i];
for(j = n - 1; j >= 0; j--, i++)
a[m - 1][j] = bounds[i];
for(j = m - 2; j > 0; j--, i++)
a[j][0] = bounds[i];
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
确实是循环条件错了。在某些地方,行和列互换。正确的解决方案是:
for(i = 0, j = 0; i < n; i++, j++) //fill elements in row 0
a[0][i] = bounds[j];
for(i = 1; i < m - 1; i++, j++) //fill elements in column (n-1) from row 1 to m-2
a[i][n - 1] = bounds[j];
for(i = n - 1; i >= 0; i--, j++) //fill row m-1, columns n-2 to 1
a[m - 1][i] = bounds[j];
for(i = m - 2; i >= 1; i--, j++) //row m-2 to 1, column 0
a[i][0] = bounds[j];