c语言求教

怎么对一个5*5的矩阵进行操作:把最大的数放到矩阵中间,把最小的4个数放到矩阵的4个角... 怎么对一个5*5的矩阵进行操作:把最大的数放到矩阵中间,把最小的4个数放到矩阵的4个角 展开
 我来答
xoaxa
2014-04-28 · TA获得超过8608个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3431万
展开全部

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int const N = 5;

void Show(int a[][N]) {
int i,j;
for(i = 0; i < N; ++i) {
for(j = 0; j < N; ++j)
printf("%4d",a[i][j]);
printf("\n");
}
}

void Sort(int a[],int n) {
int i,j,k,t;
for(i = 0; i < n - 1; ++i) {
k = i;
for(j = i + 1; j < n; ++j) {
if(a[k] > a[j]) k = j;
}
if(k != i) {
t = a[k];
a[k] = a[i];
a[i] = t;
}
}
}

int main() {
int a[N][N],b[N * N],i,j,t,flag;
srand(time(0));
for(i = 0; i < N; ++i) {
for(j = 0; j < N; ++j)
a[i][j] = b[i * N + j] = rand()%89 + 10;
}
printf("替换前:\n");
Show(a);
Sort(b,N * N);
for(i = 0; i < 4; ++i)
printf("%d ",b[i]);
printf("%d\n",b[N * N - 1]);

flag = 1;
for(i = 0; i < N && flag; ++i) { // 左上角替换
for(j = 0; j < N && flag; ++j) {
if(b[0] == a[i][j]) {
t = a[0][0];
a[0][0] = b[0];
a[i][j] = t;
flag = 0;
}
}
}
if(flag) printf("左上角替换失败。\n");

flag = 1;
for(i = 0; i < N && flag; ++i) { // 右上角替换
for(j = 0; j < N && flag; ++j) {
if(b[1] == a[i][j] && (i || j)) { // 排除左上角
t = a[0][N - 1];
a[0][N - 1] = b[1];
a[i][j] = t;
flag = 0;
}
}
}
if(flag) printf("右上角替换失败。\n");

flag = 1;
for(i = 0; i < N && flag; ++i) { // 右下角替换
for(j = 0; j < N && flag; ++j) {
if(b[2] == a[i][j] && (i || (j && j != N - 1))) {
t = a[N - 1][N - 1];
a[N - 1][N - 1] = b[2];
a[i][j] = t;
flag = 0;
}
}
}
if(flag) printf("右下角替换失败。\n");

flag = 1;
for(i = 0; i < N && flag; ++i) { // 左下角替换
for(j = 0; j < N && flag; ++j) {
if(b[3] == a[i][j] && (i || j) && (i != N - 1 || j != N - 1)) {
t = a[N - 1][0];
a[N - 1][0] = b[3];
a[i][j] = t;
flag = 0;
}
}
}
if(flag) printf("左下角替换失败。\n");

flag = 1;
for(i = 0; i < N && flag; ++i) { // 中心替换
for(j = 0; j < N && flag; ++j) {
if(b[N * N - 1] == a[i][j] && ((i && i != N - 1) || (j && j != N - 1))) {
t = a[N/2][N/2];
a[N/2][N/2] = b[N * N - 1];
a[i][j] = t;
flag = 0;
}
}
}
if(flag) printf("中心替换失败。\n");
printf("替换后:\n");
Show(a);
return 0;
}
dreambox007
2014-04-28 · TA获得超过416个赞
知道小有建树答主
回答量:295
采纳率:100%
帮助的人:257万
展开全部
void sort_num(int *p, int len)
{
for (int i = 0; i < len; i ++)
{
for (int j = i + 1; j < len; j ++)
{
if (*(p+i) > *(p+j))
{
int tmp = *(p+j);
*(p+j) = *(p+i);
*(p+i) = tmp;
}
}
}
}

void switch_num(int *num1, int *num2)
{
if (*num1 != *num2)
{
int tmp = *num2;
*num2 = *num1;
*num1 = tmp;
}
}

int main()
{
int szData[25] = {12,34,56,78,90,22,23,24,25,26,33,34,35,36,37,44,45,46,47,48,55,56,57,58,59};
int max = 0;
int szMin[4] = {szData[0],szData[1],szData[2],szData[3]};
sort_num(szData, 25);//对数组进行从小到大排列
switch_num(szData+4, szData+1);
switch_num(szData+20, szData+2);
switch_num(szData+24, szData+3);
switch_num(szData+12, szData+3);
for (int i = 0; i < 25; i ++)
{
if(!(i%5))
printf("\n");
printf(" %d ", szData[i]);
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我帅的不呆
2014-04-28 · 超过15用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:43.1万
展开全部
遍历矩阵,获取矩阵中的数据,对数据进行排序,获取最小四个数和最大数,然后把数写到相应的位置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一变班爱麻啊堡0J
高粉答主

2020-01-13 · 醉心答题,欢迎关注
知道答主
回答量:11.4万
采纳率:2%
帮助的人:5594万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式