将矩阵中最大元素放在中心,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);
}在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值