鱼C论坛

 找回密码
 立即注册
查看: 1756|回复: 1

[已解决]将一个5x5矩阵重排列

[复制链接]
发表于 2021-1-2 14:32:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将一个5x5矩阵中最大的元素放在中心, 四个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大排序), 写一个函数实现之,用main函数

例如:输入:
  1  2   3   4  5
6   7   8   9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
输出:
  1   5   6  7   2
  8   9 10 11 12
13 14 25 15 16
17 18 19 20 21
  3 22 23 24  4
最佳答案
2021-1-2 14:45:13
本帖最后由 风过无痕1989 于 2021-1-2 21:19 编辑
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int sort(int *p, int n);
  5.         int a[5][5];
  6.         int b[25];
  7.         int i, j, k = 0;
  8.         int temp1, temp2, temp3, temp4;
  9.         printf("请输入数组元素:\n");
  10.         for (i = 0; i < 5; i++)
  11.         {
  12.                 for (j = 0; j < 5; j++)
  13.                 {
  14.                         scanf_s("%d", &a[i][j]);
  15.                         b[k] = a[i][j];
  16.                         k++;
  17.                 }
  18.         }

  19.         sort(b, k);

  20.         printf("\n");

  21.         temp1 = b[1];
  22.         temp2 = b[2];
  23.         temp3 = b[3];
  24.         temp4 = b[24];

  25.         for (j = 1; j < 4; j++)    // 处理第 0 行
  26.         {
  27.                 b[j] = b[j + 3];
  28.         }
  29.         b[4] = temp1;

  30.         for (j = 5; j < 12; j++)   // 处理第 1 行及第 2 行前半
  31.         {
  32.                 b[j] = b[j + 2];
  33.         }
  34.         b[12] = temp4;

  35.         for (j = 13; j < 20; j++)   // 处理第 2 行后半第 3 行
  36.         {
  37.                 b[j] = b[j + 2];
  38.         }
  39.         b[20] = temp2;

  40.         for (j = 21; j < 24; j++)   // 处理第 4 行
  41.         {
  42.                 b[j] = b[j + 1];
  43.         }
  44.         b[24] = temp3;

  45.         k = 0;
  46.         for (i = 0; i < 5; i++)    // 一维数组转二维数组
  47.         {
  48.                 for (int j = 0; j < 5; j++)
  49.                 {
  50.                         a[i][j] = b[k];
  51.                         k++;
  52.                 }
  53.         }

  54.         for (i = 0; i < 5; i++)    // 输出数组
  55.         {
  56.                 for (j = 0; j < 5; j++)
  57.                 {
  58.                         printf("%2d ", a[i][j]);
  59.                 }
  60.                 printf("\n");
  61.         }
  62.         return 0;
  63. }

  64. int sort(int *p, int n)            // 对一维数 b 组排序
  65. {
  66.         int i, j, temp;
  67.         for (i = 0;i < n;i++)
  68.         {
  69.                 for (j = 0;j < n - 1;j++)
  70.                 {
  71.                         if (*(p + j) > *(p + j + 1))
  72.                         {
  73.                                 temp = *(p + j);
  74.                                 *(p + j) = *(p + j + 1);
  75.                                 *(p + j + 1) = temp;
  76.                         }
  77.                 }
  78.         }
  79.         return 0;
  80. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-2 14:45:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕1989 于 2021-1-2 21:19 编辑
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int sort(int *p, int n);
  5.         int a[5][5];
  6.         int b[25];
  7.         int i, j, k = 0;
  8.         int temp1, temp2, temp3, temp4;
  9.         printf("请输入数组元素:\n");
  10.         for (i = 0; i < 5; i++)
  11.         {
  12.                 for (j = 0; j < 5; j++)
  13.                 {
  14.                         scanf_s("%d", &a[i][j]);
  15.                         b[k] = a[i][j];
  16.                         k++;
  17.                 }
  18.         }

  19.         sort(b, k);

  20.         printf("\n");

  21.         temp1 = b[1];
  22.         temp2 = b[2];
  23.         temp3 = b[3];
  24.         temp4 = b[24];

  25.         for (j = 1; j < 4; j++)    // 处理第 0 行
  26.         {
  27.                 b[j] = b[j + 3];
  28.         }
  29.         b[4] = temp1;

  30.         for (j = 5; j < 12; j++)   // 处理第 1 行及第 2 行前半
  31.         {
  32.                 b[j] = b[j + 2];
  33.         }
  34.         b[12] = temp4;

  35.         for (j = 13; j < 20; j++)   // 处理第 2 行后半第 3 行
  36.         {
  37.                 b[j] = b[j + 2];
  38.         }
  39.         b[20] = temp2;

  40.         for (j = 21; j < 24; j++)   // 处理第 4 行
  41.         {
  42.                 b[j] = b[j + 1];
  43.         }
  44.         b[24] = temp3;

  45.         k = 0;
  46.         for (i = 0; i < 5; i++)    // 一维数组转二维数组
  47.         {
  48.                 for (int j = 0; j < 5; j++)
  49.                 {
  50.                         a[i][j] = b[k];
  51.                         k++;
  52.                 }
  53.         }

  54.         for (i = 0; i < 5; i++)    // 输出数组
  55.         {
  56.                 for (j = 0; j < 5; j++)
  57.                 {
  58.                         printf("%2d ", a[i][j]);
  59.                 }
  60.                 printf("\n");
  61.         }
  62.         return 0;
  63. }

  64. int sort(int *p, int n)            // 对一维数 b 组排序
  65. {
  66.         int i, j, temp;
  67.         for (i = 0;i < n;i++)
  68.         {
  69.                 for (j = 0;j < n - 1;j++)
  70.                 {
  71.                         if (*(p + j) > *(p + j + 1))
  72.                         {
  73.                                 temp = *(p + j);
  74.                                 *(p + j) = *(p + j + 1);
  75.                                 *(p + j + 1) = temp;
  76.                         }
  77.                 }
  78.         }
  79.         return 0;
  80. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-3 17:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表