首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-01-05 
请帮忙纠错一道排序题,不胜感激/*将一个5*5矩阵中最大元素放中心,四个角分别放四个最小的元素,顺序为从左

请帮忙纠错一道排序题,不胜感激
/*将一个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个特殊情况即可)

热点排行