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

Fabious 4年前 回复TA
一开始以为是一道很简单的题目,后面怎么提交都过不了,来到这里才恍然大悟犯了这种错,学到了学到了
#include<stdio.h>
int main(){
	int a[10], i, min = 0, max = 0, t;
	for(i = 0; i < 10; i++)
		scanf("%d", &a[i]);
	for(i = 0; i < 10; i++){
		if(a[i] > a[max]) max = i;
	}
	t = a[9]; a[9] = a[max]; a[max] = t;
	for(i = 0; i < 10; i++){
		if(a[i] < a[min]) min = i;
	}
	t = a[0]; a[0] = a[min]; a[min] = t;	
	for(i = 0; i < 10; i++)
		printf("%d ", a[i]);
	return 0;
}
Sea 4年前 回复TA
#include<iostream>
#include<algorithm>
int main(int argc, char *argv[]){
	int a[10];
	for(int i = 0; i<10; i++){
		std::cin>>a[i];
	}
	int min = a[0];
	int max = a[9];
	int t,u;
	for(int i = 0; i<10; i++){
		if(a[i]<min){
			min = a[i];
			t = i;
		}
		
	}
	std::swap(a[0],a[t]);
	for(int i = 0; i<10; i++){
		if(a[i]>max){
			max = a[i];
			u = i;
		}
		
	}
	std::swap(a[9],a[u]);
	for(int i = 0; i<10; i++){
		std::cout<<a[i]<<" ";
	}
}
tw 4年前 回复TA
#include<stdio.h>
#include<string.h>

int main()
{
	int b[10];
	int shuru(int x[]);
	int culi(int x[]);
	int shucu(int x[]);
	shuru(b);
	culi(b);
	shucu(b);
}
int shuru(int x[])
{
	for (int i = 0; i < 10; i++)
		scanf_s("%d",&x[i]);
	return 0;
}
int culi(int x[])
{
	int t = 0;
	for (int i = 1,j=0; i < 10; i++) //找最小数
	{
		if (x[j] > x[i])  //用已知的最小数跟下一个数比较
			j = i;
		if(i == 9)
		{
			t = x[0];
			x[0] = x[j];
			x[j] = t;
		}
	}
	for (int i = 1, j = 0; i < 10; i++)  //找最大数
	{
		if (x[j] < x[i]) // 用已知的最大数跟下一个数比较
			j = i;
		if (i == 9)
		{
			t = x[9];
			x[9] = x[j];
			x[j] = t;
		}
	}
奇山异水天下独绝 4年前 回复TA
@奇山异水天下独绝 为什么后面代码打不出来了?
奇山异水天下独绝 4年前 回复TA
大佬们看看怎么是  答案错误50%???
#include <stdio.h>
#include <stdlib.h>
#define count 10
int i, j;
void SCANF(int a[])
{
    for (i = 0; i < count; i++)
    {
        scanf("%d", &a[i]);
    }
}

void PROCESS(int a[])
{
    int z = 0, y = 0, p, q, temp1, temp2;
    for (i = 0; i < count; i++, z = 0, y = 0)
    {
        for (j = 0; j < count; j++)
        {
            if (a[i] > a[j])
            {
                z++;
            }
            if (a[i] < a[j])
            {
                y++;
            }
江畔读书人 5年前 回复TA
要是输入的全部为负数怎么办?
圣者psy素爱 5年前 回复TA
@圣者psy素爱 不是,你没有按题目要求来啊
圣者psy素爱 5年前 回复TA
运行一堆的错误呀
Alexlyn 5年前 回复TA
楼主说的很对,一次交换两个的话,在做完最小值交换后,可能会改变最大值的下标;所以要把两次判断和调换分开,我写了一个三个函数的供遇到问题的同学参考。
void tran(int a[]);
void in(int a[]);
void out(int a[]);
int main(void)
{int a[10];
 in(a);
 tran(a);
 out(a);
 return 0;}
void in(int a[])
{int i;
 for(i=0;i<10;i++)
 {scanf("%d",&a[i]);};}
void out(int a[])
{int i;
 for(i=0;i<10;i++)
 {printf("%d ",a[i]);};}
void tran(int a[])
{int i;
 int temp1,temp2,min,max,t;
 min=a[0];
 for(i=0;i<10;i++)
 {if(min>a[i]) 
 {temp1=i;min=a[i];};}; a[temp1]=a[0];a[0]=min;
 max=a[0];
 for(i=0;i<10;i++)
 {if(max<a[i]) 
 {temp2=i;max=a[i];};}; a[temp2]=a[9];a[9]=max;}
SevenShard 5年前 回复TA
@喵 拿“10 3 4 2 8 9 1 5 6 7”验证下就知道了