概述
一开始我没想到该怎么写,因为只要求交换找出最大值和最小值交换,也就是最多只有4个数字的位置被改变,而排序方法则要所有数字参与。
之后我想到了可以用一个新的变量来依次遍历对比,于是写了:
#include<stdio.h>
int main()
{
int a[10];
int min=0, max=0, x, y;//使之后的判断语句中a[min],a[max]能遍历数组
int n;
scanf("%d", &n);
for (int q = 0; q < n; q++)
scanf("%d", &a[q]);
for (int i = 0; i < n ; i++)
{
if (a[min] > a[i])
min = i;
if (a[max] < a[i])
max = i;
}
x = a[min];
a[min] = a[0];
a[0] = x;
y = a[max];
a[max] = a[n-1];
a[n-1] = y;
for (int i = 0; i < n; i++)
printf("%d", a[i]);
return 0;
}
开始还不理解,后来明白这是因为当最大值位于第一位时,最后交换位置的时候就会把max的值换走,而max又会和最后一位交换,导致错乱。
所以应该把取最小值和取最大值分开,先完成一项,在完成另一项,代码如下:
#include<stdio.h>
int main()
{
int a[10];
int min=0, max=0, x, y;//使之后的判断语句中a[min],a[max]能遍历数组
int n;
scanf("%d", &n);
for (int q = 0; q < n; q++)
scanf("%d", &a[q]);
for (int i = 0; i < n ; i++)
{
if (a[min] > a[i])
min = i;
}
x = a[min];
a[min] = a[0];
a[0] = x;//先对最小值完成位置交换
for (int i = 0; i < n; i++)
{
if (a[max] < a[i])
max = i;
y = a[max];
}
a[max] = a[n-1];
a[n-1] = y;//再进行对最大值的交换
for (int i = 0; i < n; i++)
printf("%d", a[i]);
return 0;
}
这样就不会有问题了。
最后
以上就是隐形帽子为你收集整理的(C)PTA交换最大值和最小值(个人学习记录)的全部内容,希望文章能够帮你解决(C)PTA交换最大值和最小值(个人学习记录)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复