请帮忙纠错一道排序题,不胜感激

jasonherdsman 2012-11-20 08:14:15
/*将一个5*5矩阵中最大元素放中心,四个角分别放四个最小的元素,
顺序为从左到右,从上到下依次由小到大存放*/
#include<stdio.h>
#define N 25
void swap(int *a,int *b);
main()
{
int i,j,k,a[N],b[5][5],*p[5];
printf("输入5*5矩阵:\n");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<25;i++)
{
for(j=i+1;j<N;j++)
{
if(a[i]<a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
b[i][j]=a[5*i+j];
}
}
p[0]=&b[0][0];
for(i=1;i<=5;i++)
p[5-i]=&b[4][5-i];
swap(&b[2][2],p[0]);
swap(&b[0][0],p[4]);
swap(&b[0][4],p[3]);
swap(&b[4][0],p[2]);
swap(&b[4][4],p[1]);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%-3d",b[i][j]);
}
printf("\n");
}
}
void swap(int *a,int *b)
{
int k;
k=*a;
*a=*b;
*b=k;
}
...全文
86 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
newtee 2012-11-20
  • 打赏
  • 举报
回复
做的那么烦 是为了用指针数组? 数组a最小值,最大值放好位置 然后2个for循环对数组赋值(排除那5个特殊情况即可)
ardayoyo 2012-11-20
  • 打赏
  • 举报
回复
另外,其实不需要P这个东东,直接交换矩阵b的元素即可,给你一个简化版

#include<stdio.h>
#define N 25
void swap(int *a,int *b);
 void main()
{
	int i,j,k,a[N],b[5][5];
    printf("输入5*5矩阵:\n");
	for(i=0;i<N;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<25;i++)
	{
		for(j=i+1;j<N;j++)
		{
			if(a[i]<a[j])
			{
				k=a[i];
				a[i]=a[j];
				a[j]=k;
			}
		}
	}
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{
			b[i][j]=a[5*i+j];
		}
	}
	swap(&b[2][2],&b[0][0]);
	swap(&b[0][0],&b[4][4]);
	swap(&b[0][4],&b[4][3]);
	swap(&b[4][0],&b[4][2]);
	swap(&b[4][4],&b[4][1]);
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{ 
			printf("%-3d",b[i][j]);
		}
		printf("\n");
	}
}
void swap(int *a,int *b)
{
	int k;
	k=*a;
	*a=*b;
	*b=k;
} 
ardayoyo 2012-11-20
  • 打赏
  • 举报
回复

……
p[0]=&b[0][0];
//for(i=1;i<=5;i++)
for(i=1;i<5;i++)//去一个等号
    p[5-i]=&b[4][5-i];

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧