将矩阵中最大元素放在中心,4个最小的元素放于四角。

将一个5*5的矩阵中最大元素放在中心,4个角分别放4个最小的元素(顺序从左至右从上至下)
先将二维数组转化为一维数组,做4次冒泡排序之后,数组中最后4位就是4个最小值降序排列,然后将其与需要交换的元素交换,然后转化为二维数组;找出其中最大值,与中心元素交换,输出二维数组。
代码缺陷:
在4次冒泡排序时打乱了原数组的原本序列,若要求不打乱原序列,只进行交换,则需要额外定义4个变量,访问数组时依次进行比较(若有一个已标记的下表满足条件,则用其替换出来的值与未比较的值依次进行此流程),用变量记住其下标,最后交换4个最小值应在的位置,最大值的找法无需更改。(对于指针的学习和理解欠缺,所以指针的使用有些不伦不类)。

void Show(int(p)[5])
{
puts("
********************************");
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
printf("%d “, p[i][j]);
}
puts(”");
}
}
void T(int (*p)[5])
{
int t, a, b;
int max = 0;
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
if (p[i][j] > max)
{
max = p[i][j];
a = i, b = j;
}
}
}
t = p[2][2];
p[2][2] = p[a][b];
p[a][b] = t;
}
void M(int(*p)[5])
{
int m = 0, t;
int b[25];
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
b[i * 5 + j] = p[i][j];
}
}
int i;
for (i = 0; i < 4; ++i)
{
for(int j=0;j<25-i;++j)
if (b[j] < b[j + 1])
{
t = b[j];
b[j] = b[j + 1];
b[j + 1] = t;
}
}
t = b[0], b[0] = b[24], b[24] = t;
t = b[4], b[4] = b[23], b[23] = t;
t = b[20], b[20] = b[22], b[22] = t;
t = b[21], b[24] = b[24], b[24] = t;
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
p[i][j] = b[i * 5 + j];
}
}
//for (int i = 0; i < 5; ++i)
//{
// for (int j = 0; j < 5; ++j)
// {
// printf("%d “, p[i][j]);
// }
//}
}
int main()
{
int a[5][5];
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
scanf(”%d", &a[i][j]);
}
}
M(a); //做最小元素的处理
T(a); //找出最大元素,并与中心元素交换
Show(a);
}在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页