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

输入一个正整数n(1<n≤10),再输入n个整数,将最小值与第一个数交换,然后输出最小值及下标,输出交换后的n个数。

1234567891011121314151617181920212223242526272829#include <stdio.h>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<n; i++)  scanf ("%d",&a[i]); min = a[0]; for (i=0; i<n; i++)  if (min > 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<n; i++)   printf ("%d ",a[i]);  printf ("\n");}

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-31
最大值与最后一个交换,需要使用到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]
相似回答
大家正在搜