描述
将一个5X5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下一次从小到大存放),写个一函数来实现,用main函数调用。(要求用指针来做)
输入
每组数据为5X5的矩阵,矩阵的数字为整数。有多组测试数据,直到输入文件结束。
输出
输出按题目要求改变后的矩阵,每组结果后空一行
输入样例 1 点击复制
35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11
输出样例 1
11 34 33 32 12 30 29 28 27 26 25 24 35 22 21 20 19 18 17 16 13 23 15 31 14
#include <stdio.h>
int i, j;
void seek(int *s, int a, int b) {
int tmp;
int *pmax = s;
int *pmin = s;
for (i = 0; i < a * b; i++) {
if (*pmax < * (s + i))
pmax = s + i;//找到数组中最大数
if (*pmin > *(s + i))
pmin = s + i;//找到数组中最小数
}
tmp = *(s + 12);
*(s + 12) = *pmax;
*pmax = tmp;//最大的元素放在中心
tmp = *s;
*s = *pmin;
*pmin = tmp;//最小元素放左上角
pmin = s + 1;
for (i = 0; i < a * b; i++) {
if (i == 0)
continue;//再次遍历时排除已找到的最小元素
if (*pmin > *(s + i))
pmin = s + i;//找到数组中最小数
}
tmp = *(s + 4);
*(s + 4) = *pmin;
*pmin = tmp;//第二小元素放右上角
pmin = s + 1;
for (i = 0; i < a * b; i++) {
if (i == 0 || i == 4)
continue;//再次遍历时排除已找到的最小元素
if (*pmin > *(s + i))
pmin = s + i;//找到数组中最小数
}
tmp = *(s + 20);
*(s + 20) = *pmin;
*pmin = tmp;//第三小元素放右下角
pmin = s + 1;
for (i = 0; i < a * b; i++) {
if (i == 0 || i == 4 || i == 20)
continue;//再次遍历时排除已找到的最小元素
if (*pmin > *(s + i))
pmin = s + i;//找到数组中最小数
}
tmp = *(s + 24);//第四小元素放左下角
*(s + 24) = *pmin;
*pmin = tmp;
}
int main() {
int s[5][5];
while (scanf("%d", &s[0][0]) != EOF) {
for (i = 0; i < 5; i++)//输入
for (j = 0; j < 5; j++) {
if (i == 0 && j == 0)
continue;
scanf("%d", &s[i][j]);
}
seek((int *)s, 5, 5);
for (i = 0; i < 5; i++) {//输出
for (j = 0; j < 5; j++) {
printf("%d ", s[i][j]);
}
printf("\n");
}
printf("\n");
}
}