C++编程:将一个5X5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右,从上到下顺序)

2025-06-21 15:37:32
推荐回答(3个)
回答1:

/*
input the array :
the sorted array :
0 4 12 20 1
5 6 7 8 9
10 11 24 13 14
15 16 17 18 19
3 21 22 23 2

请按任意键继续. . .
*/
#include
using namespace std;

int main() {
void search(int a[][5]);
int a[5][5],i,j;
cout << "input the array :\n";
for(i = 0;i < 5;i++)
for(j = 0;j < 5;j++)
a[i][j] = 5 * i + j;
// cin >> a[i][j];
search(a);
cout << "the sorted array :\n";
for(i = 0;i < 5;i++) {
for(j = 0;j < 5;j++) {
cout.width(3);
cout << a[i][j];
}
cout << endl;
}
cout << endl;
return 0;
}

void search(int p[][5]) {
int i,j,k,t,a[25];
int row[25],col[25]; // 临时数组变量,用于记录各个变量在原数组中的索引
for(i = 0; i < 5; ++i) { // 先复制
for(j = 0; j < 5; ++j) {
a[5 * i + j] = p[i][j];
row[5 * i + j] = i;
col[5 * i + j] = j;
}
}
for(i = 0; i < 24; ++i) { // 降排序
k = i;
for(j = i + 1;j < 25; ++j)
if(a[k] < a[j]) k = j;
if(k != i) {
t = a[i];
a[i] = a[k];
a[k] = t;
t = row[k];
row[k] = row[i];
row[i] = t;
t = col[k];
col[k] = col[i];
col[i] = t;
}
}
// 最大的放在左上角
t = p[2][2];
p[2][2] = a[0];
p[row[0]][col[0]] = t;

// 最小的放在左上角
t = p[0][0];
p[0][0] = a[24];
p[row[24]][col[24]] = t;

// 次最小的放在右上角
t = p[0][4];
p[0][4] = a[23];
p[row[23]][col[23]] = t;

// 第三小的放在右下角
t = p[4][4];
p[4][4] = a[22];
p[row[22]][col[22]] = t;

// 第四小的放在左下角
t = p[4][0];
p[4][0] = a[21];
p[row[21]][col[21]] = t;
}

回答2:

min[i]=*(p+k);
改成min[i]=*(*p+k)就行了

回答3:

*(*p+k)试一下。