#include<stdio.h>
void swap(int*,int*);
void process(int *,int);
void arry(int*,int);
int main()
{ int a[5][5],i,j;
for(i=0; i<5; i++)
{ for(j=0; j<5; j++)
scanf("%d",&a[i][j]);
}
process(*a,5);
arry(*a,5);
return 0;
}
void process(int *a,int n)
{ int i,max,min,max_i,min0,min1,min2,min3;
max=min=a[0];
max_i=min0=min1=min2=min3=0;
for(i=0; i<n*n; i++)
if(a[i]>max)
{ max=a[i];
max_i=i;
}
if(a[i]<min)
{ min=a[i];
min3=min2;
min2=min1;
min1=min0;
min0=i;
}
swap(&a[n*n/2],&a[max_i]);
swap(&a[0],&a[min0]);
swap(&a[n-1],&a[min1]);
swap(&a[(n-1)*n],&a[min2]);
swap(&a[(n*n-1)],&a[min3]);
}
void swap(int*p,int*q)
{ int t=*p;
*p=*q;
*q=t;
}
void arry(int*a,int n)
{ for(int i=0; i<n; i++)
{ for(int j=0; j<n; j++)
printf("%5d",*(a+i*n+j));
printf("\n");
}
}
矩阵内元素处理 我的代码有问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- Autumn0923 2021-10-31 14:06关注
我看了一下,你这个代码的选四个最小数有问题,当然你能把二维数组当成一维数组来处理,这确实是个不错的方法,我试了一个样例5 8 10 12 11 6 之后都输入100,你看看你这个还能选出最小的四个数据吗,所以我觉得你这个有点问题,而且你要遍历所有的数据的的话应该放到循环里,我看你没有放到循环里,可能是忘了加括号,当然你这个想法肯定是好的,但是简单的赋值是肯定没法选出最小值的,我想的办法就是,你先把这些数据都排序,但是不放到你创建的二维数组里,整一个新的二维数组,排序好之后存进去,存进去之后再把四个角的值一换,当然这样一改就出现问题了,就是你原本的数据还在里面,是替换,不是交换,所以你可以再搞一个把他们原本的数据位置都记下来,这样就可以实现很多的功能,当然我不知道还有没有别的方法,这可能有点麻烦
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 livecharts wpf piechart 属性
- ¥20 数学建模,尽量用matlab回答,论文格式
- ¥15 昨天挂载了一下u盘,然后拔了
- ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
- ¥20 易康econgnition精度验证
- ¥15 msix packaging tool打包问题
- ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
- ¥15 python的qt5界面
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置