读书人

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

发布时间: 2013-01-05 15:20:39 作者: rapoo

请帮忙纠错一道排序题,不胜感激
/*将一个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;
}
[解决办法]


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


[解决办法]
另外,其实不需要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;
}

[解决办法]
做的那么烦 是为了用指针数组?
数组a最小值,最大值放好位置
然后2个for循环对数组赋值(排除那5个特殊情况即可)

读书人网 >C++

热点推荐