c语言,输入一个正整数n(1<n≤10),再输入n个整数,将最小值与第一个数交换

2025-01-07 06:01:08
推荐回答(2个)
回答1:

1234567891011121314151617181920212223242526272829#include void main (){ int a[10]; int i,k=0,n,min,temp; printf ("输入n:"); scanf ("%d",&n); printf ("输入%d个数:\n",n); for (i=0; i a[i])  {   min = a[i];   k = i;  }  printf ("最小值是:%d\n下标是:%d\n",min,k);  printf ("将最小值与第一个数交换后:\n");  if (k != 0)  {   temp = a[0];   a[0] = a[k];   a[k] = temp;  }  for (i=0; i

回答2:

最大值与最后一个交换,需要使用到max 和a[i],以及一个临时变量,代码中使用的是max a[0] a[i],这里貌似有点问题。最小值与第一个交换,貌似你也是用的这3个变量。
如果觉得使用的变量过多,可以不使用临时变量,用嵌入式程序员的思路,节约空间复杂度,只使用max 和 a[i]两个变量就地进行值的交换
在两个 if 语句内改成
max = max + a[i];
a[i] = max - a[i];
max = max - a[i];
如果担心两数和超出范围可以用^异或操作
改成
max = max ^ a[i];
a[i] = a[i] ^ max;
max = max ^ a[i];
这样就不用担心两整数的和超出表示范围了。

下面的min的操作也与以上内容类似。
改成
min = min ^ a[0];
a[0] = a[0] ^ min
min = min ^ [a0]