解题思路:
输入10个数;

先找到最小数与第一个数交换;

再找到最大数与最后一个交换;

输出交换后的十个数,每个后面带空格;


注意事项:
不可以同时找到最大数和最小数然后一起交换

有同学问为什么不可以,先找到最小最大,在一次性交换,原因如下

如输入数据: 10  1  2  3有

min=1,对应下标为 1   ;max=10对应下标为0

先与第一个数交换后为:1   10    2   3  ,但是注意此时正确max下标变成了1

继续按照之前记录的max下标0进行交换,即变成1与3交换,与实际10与3交换不相符,所以出错



参考代码:

#include <stdio.h>

void deal( int a[] );


int main()
{
    int x[10];
    for ( int i = 0; i < 10; i++ )
        scanf( "%d", &x[i] );

    deal( x );

    return(0);
}


void deal( int a[] )
{
    int max = 0, x, team, l, min = a[0];

    for ( int i = 0; i < 10; i++ )    //找最小数,交换
    {
        if ( a[i] < min )
        {
            min = a[i]; l = i;
        }
    }
    team    = a[0];
    a[0]    = min;
    a[l]    = team;
    for ( int k = 0; k < 10; k++ )     //找最大数,交换
    {
        if ( a[k] > max )
        {
            max = a[k]; x = k;
        }
    }
    team    = a[9];
    a[9]    = max;
    a[x]    = team;

    for ( int j = 0; j < 10; j++ )  //输出
        printf( "%d ", a[j] );
}

别忘点赞哦-.-

点赞(66)
 

0.0分

104 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 68 条评论

BREEZE 5年前 回复TA
#include<stdio.h>

void input(long a[], int n)
{
	for(int i=0;i<n;i++)
		scanf("%ld",&a[i]);
}
void exchange(long a[],int n)
{
	
	for(int i=0;i<n;i++)
	{
		if(a[0]>a[i])
			{
				long temp;
				
				temp=a[i];
				a[i]=a[0];
				a[0]=temp;
			}
	}
	
	for(int i=n-2;i>=0;i--)
	{
		if(a[9]<a[i])
			{
				long temp;
				
				temp=a[i];
				a[i]=a[9];
				a[9]=temp;
			}
	}
	
}
void output(long a[],int n)
{
	for(int i=0;i<n;i++)
		printf("%ld ",a[i]);
}


int main()
{
	long a[10];
	
	input(a,10);
	exchange(a,10);
	output(a,10);
	
	
	return 0;
}为什么我的不可以唔printf("萌新");
君应怜 5年前 回复TA
#include<stdio.h>
void get(int *n)
{
	int i;
	for(i=0;i<10;i++)
		scanf("%d",&n[i]);
}
void fun(int *n)
{
	int i = 0,max_s,min_s;
	int max,min,temp,temp1;
	max=min=n[0];
	max_s = min_s =0;
	for(;i<10;i++)
	{
		if(max<n[i])
		{
			max=n[i];
			max_s = i;
		}
		if(min>n[i])
		{
			min=n[i];
			min_s = i;
		}
	}
	temp = n[0];
	n[0] = n[min_s];
	n[min_s]= temp;
	
	temp1 = n[9];
	n[9] = n[max_s];
	n[max_s] = temp1;	
}


void fget(int *s)
{
	int i;
	for(i=0;i<10;i++)
		printf("%d ",s[i]);
}
	
int main(void)
{
	int num[10];
	get(num);
	fun(num);
	fget(num);
}
500miles 6年前 回复TA
int max = 0, x, team, l, min = a[0];  为什么定义max=a[0]会运行错误
779777 6年前 回复TA
这个答案是错误的,当a【0】是最小值时,
if ( a[i] < min )
        {
            min = a[i]; l = i;
        }
这个if不会执行,l没有赋值,程序会崩溃
milk 6年前 回复TA
@milk @wenyajie 谢谢
Manchester 6年前 回复TA
@milk 如上增补解释
milk 6年前 回复TA
为什么不能同时找最大最小,然后再交换?
cetus 6年前 回复TA
我的天,你的注意事项简直有用
btw,是怎么发现的= =