解题思路:
输入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 条评论

小白到大神 5年前 回复TA
@望尽天涯路 @XZK 因为最小值的位置不定,你的测试样本可能没有包含
5年前 回复TA
50%错误,为什么呢?
#include<stdio.h>
#include<math.h>
int chuli(int a[10]){
	int m=0,j=0,k=0;
	for(int i=0;i<10;i++){
		if(a[i]>m){
			m=a[i];
			j=i;
		}
	}	
	int n=a[0];
	for(int i=0;i<10;i++){
		if(a[i]<n){
			n=a[i];
			k=i;
		}
	}
	int t=0,g=0;
	t=a[0];g=a[9];
	a[0]=a[k];a[9]=a[j];
	a[k]=t;a[j]=g;
}
void input(int a[10]){
    for(int i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	}
void print(int a[10]){
	for(int i=0;i<10;i++){
		printf("%d ",a[i]);
	}	
	}
int main(){
	int a[10];
	input(a);
	chuli(a);
	print(a);
}
奔跑吧C 5年前 回复TA
void Shu_Ru();
void Zheng_li(int p[], int n);
void ShuChu(int *p, int n);
int Shu[10], XiaoWei = 0, DaWei = 0;
int main()
{
	Shu_Ru();
	Zheng_li(Shu, 10);
	ShuChu(Shu, 10);
    
}
void Shu_Ru()
{
	for (int i = 0;i < 10;i++)
	{
		scanf_s("%d", &Shu[i]);
	}
}
void Zheng_li(int p[], int n)
{
	int DaShu=p[0],XiaoShu=p[0];
	for (int i = 1;i < n;i++)
	{
		if (DaShu < p[i])
		{
			DaShu = p[i];
			DaWei = i;
		}
		if (XiaoShu > p[i])
		{
			XiaoShu = p[i];
			XiaoWei = i;
		}
	}
}
void ShuChu(int *p, int n)
{
	int Zhuan;
	Zhuan = *(p + DaWei);
	*(p + DaWei) = *(p + n-1);
	*(p + n-1) = Zhuan;
	Zhuan =
福卡 5年前 回复TA
这是函数里面的运行函数,这部分可以输出正确答案,但是提交的时候答案错误50%,已经验证就是这一部分出了问题,求大神解答;
void max(int a[])
{
int *p,*t;
	p=t=&a[0];
	int i,j;
	j=a[0];
	for(i=1;i<10;i++)
	{
		if(*p>a[i]&&j>a[i])
		{
			p=&a[i];
			
		}
		
	}
	for(i=1;i<10;i++)
	{
		if(*t<a[i]&&j<a[i])
		{
			t=&a[i];
			
		}
	}
	for(i=0;i<10;i++)
	{
		if(*p==a[i])
		{
			j=a[i];
			a[i]=a[0];
			a[0]=j;
			break; 
		}
	}
	for(i=0;i<10;i++)
	{
		if(*t==a[i])
		{
			j=a[i];
			a[i]=a[9];
			a[9]=j;
			break;
		}
	}
	mbx(a);
}
君莫笑 5年前 回复TA
@望尽天涯路 为什么max=0换成max=a[9]结果会有错呢?想不通,在线求解
misty 5年前 回复TA
@hichens void exchange(int a[])函数中如果if(a[min]>=a[i])成立就不进行下一个if语句
望尽天涯路 5年前 回复TA
题目不是要求三个函数么?
一个函数对应一个功能
那输出应该再调用另一个函数吧?
豆豆哦 5年前 回复TA
#include<stdio.h>
void Scanf(int *a){
	for(int i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
}
void Cl(int *a){
	int min,max,itm,t;
	min=a[0];
	max=a[0];
	for(int i=0;i<10;i++){
		if(min>a[i]){
			min=a[i];
			itm=i;
		}
	}
	t=a[0];
	a[0]=a[itm];
	a[itm]=t;
	for(int i=0;i<10;i++){
		if(max<a[i]){
			max=a[i];
			itm=i;
		}
	}
	t=a[9];
	a[9]=a[itm];
	a[itm]=t;
	
}
void Printf(int *a){
	for(int i=0;i<10;i++){
		printf("%d ",a[i]);
	}
}
void main(){
	int a[10];
	Scanf(a);
	Cl(a);
	Printf(a);
}
hichens 5年前 回复TA
@hichens 哪里有漏洞?
hichens 5年前 回复TA
#include<stdio.h>
int t;
#define swap(a,b) t=a;a=b;b=t;
void input(int a[])
{
    int i;
    for(i = 0;i < 10;++i)
        scanf("%d",&a[i]);
}
void exchange(int a[])
{
    int i,min = 0,max = 0;
    for(i = 0;i < 10;++i)
    {
        if(a[min]>=a[i])
            min = i;
        if(a[max]<=a[i])
            max = i;
    }

    if(min == 9&&max == 0)
    {
        swap(a[max],a[min]);

    }
    else
    {
        swap(a[0],a[min]);
        swap(a[9],a[max]);
    }

}
void Print(int a[])
{
    int i;
    for(i = 0;i < 10;++i)
        printf("%d ",a[i]);
}
int main()
{
    int a[10];
    input