Sample input:
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
Sample output:
1 5 21 13 2
6 7 8 9 10
11 12 25 14 15
16 17 18 19 20
3 22 23 24 4
#include<stdio.h>
#include<string.h>
int main()
{
int arr[5][5] = { 0 };
int i = 0, j = 0;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
scanf("%d", &arr[i][j]);
}
}
int max = arr[0][0], min1 = arr[0][0], maxi = 0, maxj = 0, mini[4] = { 0 }, minj[4] = { 0 };
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (max < arr[i][j])
{
max = arr[i][j];
maxi = i, maxj = j;
}
}
}
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (min1 > arr[i][j])
{
min1 = arr[i][j];
mini[0] = i, minj[0] = j;
}
}
}
int t = arr[2][2];
arr[2][2] = arr[maxi][maxj];
arr[maxi][maxj] = t;
t = arr[0][0];
arr[0][0] = arr[mini[0]][minj[0]];
arr[mini[0]][minj[0]] = t;
int min2 = max, min3 = max, min4 = max;//最大和最小
for (i = 0; i < 5; i++)//找第二小
{
if (i == 0)
{
for (j = 1; j < 5; j++)
{
if (min2 >= arr[i][j])
{
min2 = arr[i][j];
mini[1] = i, minj[1] = j;
}
}
}
else
{
for (j = 0; j < 5; j++)
{
if (min2 >= arr[i][j])
{
min2 = arr[i][j];
mini[1] = i, minj[1] = j;
}
}
}
}
t = arr[mini[1]][minj[1]];
arr[mini[1]][minj[1]] = arr[0][4];
arr[0][4] = t;
for (i = 0; i < 5; i++)//第三小
{
for (j = 0; j < 5; j++)
{
if ((i == 0 && j == 0)||(i== 0 &&j== 4) )
{
continue;
}
if (min3 >= arr[i][j])
{
min3 = arr[i][j];
mini[2] = i, minj[2] = j;
}
}
}
t = arr[mini[2]][minj[2]];
arr[mini[2]][minj[2]] = arr[4][0];
arr[4][0] = t;
for (i = 0; i < 5; i++)//第四小
{
for (j = 0; j < 5; j++)
{
if ((i == 0 && j == 0 )|| (i == 0 && j == 4 )||(i== 4 &&j== 0 ))
{
continue;
}
if (min4 >= arr[i][j])
{
min4 = arr[i][j];
mini[3] = i, minj[3] = j;
}
}
}
t = arr[mini[3]][minj[3]];
arr[mini[3]][minj[3]] = arr[4][4];
arr[4][4] = t;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j == 0)
printf("%d", arr[i][j]);
else
{
if (j != 4)
printf(" %d", arr[i][j]);
else
printf(" %d\n", arr[i][4]);
}
}
}
return 0;
}
分析:我写的这个代码,没有用子函数来实现题目的要求,并且在寻找各个目标数字的过程中都很复杂;但容易理解,适合初学者。