切换数组中的两个元素

时间:2019-02-07 15:54:43

标签: c arrays switching

基本水平,请耐心等待。有一些类似的话题,但没有找到我的运气。我想做的是在一行中找到max元素,然后将其放在同一行的最后一个元素的位置,而将最后一个元素放在程序找到的max的位置。

所以我在C语言中有了这段代码,应该打印原始数组,进行魔术处理,然后打印修改后的数组。它确实在第一行中找到了max元素,将其放在同一行的最后一个位置,但没有进行切换-最后一个元素不跳到max元素的位置。我知道我做了一些愚蠢而简单的事情,但是我只是找不到错误在哪里。任何帮助,高度赞赏!

int main()
{
int a[3][4]={23,32,45,12,53,75,38,72,14,37,42,82}, i, j, t, l, max=a[1][0];
for(i=0;i<3;i++){
   printf("\n");
   for(j=0;j<4;j++){
       printf("%d ", a[i][j]);
   }
}
for(l=0;l<4;l++){
    if(a[1][l]>max){max=a[1][l];}
}
t=a[1][3];
a[1][3]=max;
max=t;
for(i=0;i<3;i++){
   printf("\n");
   for(j=0;j<4;j++){
       printf("%d ", a[i][j]);
   }
}    


return 0;
}

这是它返回的内容(原始数组):

  

23 32 45 12
  53 75 38 72
  14 37 42 82

(修改后的数组):

  

23 32 45 12
  53 75 38 75
  14 37 42 82

1 个答案:

答案 0 :(得分:1)

您还需要存储max的位置:

int max_pos = 0; //same as the initial max - a[1][0]
for(l=0;l<4;l++){
    if(a[1][l]>max){max=a[1][l]; max_pos=l;}
}

然后在您切换它们时:

t=a[1][3];
a[1][3]=max;
a[1][max_pos] = t;

我假设您知道这仅发生在第二行。如果要对所有行执行此操作,则必须将位置存储在数组中。