本题要求编写程序先将输入的一系列整数中的最小值与第一个数交换然后将最大值与最后一个数交换最后输出交换后的序列。注意题目保证最大和最小值都是唯一的。输入格式输入在第一行中给出一个正整数N≤10第二行给出N个整数数字间以空格分隔。输出格式在行中顺序输出交换后的序列每个整数后跟一个空格。输入样例5 8 2 5 1 4输出样例1 2 5 4 8记录我debug几个小时的题改了好几遍T-T,这是我的第一篇博客此题一开始做法是用选择排序但是选择排序中间的数字的顺序也会跟着改变后来我的想法是先找到最大值最小值然后再遍历数组在数组中找到对应的数再将对应的数根据题目要求的那样交换但很奇怪结果一直不对这是改过的正确代码#includestdio.h int main() { int array[10]; int n,j,i,k,temp,l; scanf(%d,n); for(i0;in;i) scanf(%d,array[i]); int minarray[0],maxarray[n-1]; for(l0;ln;l){ min(minarray[l])?min:array[l]; max(maxarray[l])?max:array[l]; } for(k0;kn;k) { if(array[k]min){ temparray[0]; array[0]array[k]; array[k]temp;} } for(k0;kn;k) { if(array[k]max){ temparray[n-1]; array[n-1]array[k]; array[k]temp;} } for(j0;jn;j){ printf(%d ,array[j]); } return 0; }原始版1一开始min,max结果一直不对当for(l0;ln;l){ min(minarray[l])?array[0]:array[l]; max(maxarray[l])?array[n-1]:array[l]; }试想当最后一次循环当上一次的结果使maxarray[l-2],但是此次循环array[l-2]array[l-1],则结果应该是array[l-2]按我上面的代码来结果会变成array[n-1],不能又等于初始值的错误要清楚循环过程中max可以改变的初始版2改完上一个我的下面代码其实是这样的并一起遍历并没有考虑到是首先交换首数因为可能先对应到max,则max先交换了for(k0;kn;k) { if(array[k]min){ temparray[0]; array[0]array[k]; array[k]temp;} } else if(array[k]max){ temparray[n-1]; array[n-1]array[k]; array[k]temp;} }以下是借鉴了厉害的uu的答案,我又加以简化了思路可以学习改变数组下标方式思路简单一些效率更高#includestdio.h int main() { int array[10]; int n,j,i,k,temp,l; scanf(%d,n); for(i0;in;i) scanf(%d,array[i]); int minarray[0],maxarray[n-1]; for(l0;ln;l){ min(minarray[l])?min:array[l]; max(maxarray[l])?max:array[l]; } for(k0;kn;k) { if(array[k]min){ temparray[0]; array[0]array[k]; array[k]temp; } } for(k0;kn;k) { if(array[k]max){ temparray[n-1]; array[n-1]array[k]; array[k]temp; } } for(j0;jn;j) printf(%d ,array[j]); return 0; }看清题意此题1.中间数字序列不能改变只是首位数改变2.先改变首数后是尾数所以不能并一起遍历