我是靠谱客的博主 隐形帽子,最近开发中收集的这篇文章主要介绍(C)PTA交换最大值和最小值(个人学习记录),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

         一开始我没想到该怎么写,因为只要求交换找出最大值和最小值交换,也就是最多只有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交换最大值和最小值(个人学习记录)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部