天梯赛题目练习——交换最小值和最大值(附带测试点)

交换最小值和最大值

题目

在这里插入图片描述

答案

#include<stdio.h>
int main()
{
	int i,j;
	int n,t;
	scanf("%d",&n);
	int a[n];
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	
	int min=a[0],flag1=0;
	for(i=0;i<n;i++)
	{
		if(a[i]<min)
		{
			min=a[i];
			flag1=i;
		}
	}
	
	t=a[0];
	a[0]=a[flag1];
	a[flag1]=t;
	
	int max=a[0],flag2=0;
	for(i=0;i<n;i++)
	{
		if(a[i]>max)
		{
			max=a[i];
			flag2=i;
		}
	}
	
	t=a[n-1];
	a[n-1]=a[flag2];
	a[flag2]=t;
	for(i=0;i<n;i++)
	printf("%d ",a[i]);
}

测试点

在这里插入图片描述

总结

我在做这道题有点想当然了,一开始就直接找这个数组里最大值最小值的下标然后连续交换两次,结果当然就错了

这道题应该是有两种解法,要么先遍历一遍找最小值,交换,再遍历一遍找最大值交换;要么直接找到最小值最大值的位置,然后在交换时进行判断

我选择的是第一种,当然一部分原因是第二种方法需要动脑想想,自己想偷懒就没有尝试

注意:int max=a[0],flag2=0;这行代码要出现在第一次交换之后,否则会出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值