游客 Signup | Login
中文 | En

1253 - C语言10.23

写一个函数,将一个5×5的整形矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放)。所有的元素调整都需要通过位置的交换实现。在main函数中读入和输出矩阵,通过调用函数来实现矩阵的处理过程。

Input

共有5行,每行包括5个用空格隔开的整数,表示整个5×5的矩阵。保证整个矩阵中所有的元素互不相同,且最大的元素以及最小的4个元素初始时不在矩阵中心或四个角。

Output

与输入格式相同,输出按照题目描述中的方法处理后的矩阵。在每个整数后输出一个空格。

请注意行尾输出换行。

Examples

Input

6 7 8 9 10
1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20

Output

1 7 8 9 2 
6 10 16 20 5 
11 12 25 14 15 
21 22 23 24 13 
3 17 18 19 4 

Solution C

#include<stdio.h>
main()
{
	int a[5][5],t,i,j,b[25],n=0;
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	for(i=0;i<5;i++)                     /*将25个数存放在b数组中*/
	{
		for(j=0;j<5;j++)
		{
			b[n++]=a[i][j];
		}
	}
	for(i=0;i<25;i++)                    /*将25个数按从小到大排序*/
	{
		for(j=24;j>i;j--)
		{
			if(b[j-1]>b[j])
			{
				t=b[j-1];
				b[j-1]=b[j];
				b[j]=t;
			}
		}
	}
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{
			if(a[i][j]==b[0])
			{
				t=a[i][j];
				a[i][j]=a[0][0];
				a[0][0]=t;
			}
			if(a[i][j]==b[1])
			{
				t=a[i][j];
				a[i][j]=a[0][4];
				a[0][4]=t;
			}
			if(a[i][j]==b[2])
			{
				t=a[i][j];
				a[i][j]=a[4][0];
				a[4][0]=t;
			}
			if(a[i][j]==b[3])
			{
				t=a[i][j];
				a[i][j]=a[4][4];
				a[4][4]=t;
			}
			if(a[i][j]==b[24])
			{
				t=a[i][j];
				a[i][j]=a[2][2];
				a[2][2]=t;
			}
		}
	}
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
}


Solution C++

#include <stdio.h>
int main() {
	void T(int mat[][5], int n);
	int mat[5][5];
	int i, j;
	for (i = 0;i < 5;i++)
		for (j = 0;j < 5;j++)
			scanf("%d", &mat[i][j]);
	T(mat, 5);
	for (i = 0;i < 5;i++) {
		for (j = 0;j < 5;j++)
			printf("%d ", mat[i][j]);
		printf("\n");
	}
	return 0;
}
/* 矩阵处理函数 */
void T(int mat[][5], int n) {
	int i, j, temp;
	int *a, *b, *c, *d, *max;
	/* 设置4个最小元素以及最大元素指针的初始值 */
	a = &mat[0][0];
	b = &mat[0][0];
	c = &mat[0][0];
	d = &mat[0][0];
	max = &mat[0][0];
	for (i = 0;i < 5;i++) {
		for (j = 0;j < 5;j++) {
			if (mat[i][j] < *a) {
				d = c; c = b; b = a;
				a = &mat[i][j];
			} else if (mat[i][j] < *b) {
				d = c; c = b;
				b = &mat[i][j];
			} else if (mat[i][j] < *c) {
				d = c;
				c = &mat[i][j];
			} else if (mat[i][j] < *d) {
				d = &mat[i][j];
			}
			if (mat[i][j] > *max)
				max = &mat[i][j];
		}
	}
	/* 依次替换4个最小元素以及最大的元素 */
	temp = mat[0][0]; mat[0][0] = *a; *a = temp;
	temp = mat[0][4]; mat[0][4] = *b; *b = temp;
	temp = mat[4][0]; mat[4][0] = *c; *c = temp;
	temp = mat[4][4]; mat[4][4] = *d; *d = temp;
	temp = mat[2][2]; mat[2][2] = *max; *max = temp;
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题