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

uq_68577944886 1年前 回复TA
#include <stdio.h>

int one(int a[10]) {
	int i;
	for (i = 0; i < 10; i++) {
		scanf("%d", &a[i]);
	}
	return a[i];

}

int two(int a[10]) {
	int i, t;
	for (i = 0; i < 10; i++) {
		if (a[i] < a[0]) {
			t = a[i];
			a[i] = a[0];
			a[0] = t;

		} else if (a[i] > a[9]) {
			t = a[i];
			a[i] = a[9];
			a[9] = t;
		}
	}
	return a[i];
}

int three(int a[10]) {
	for (int i = 0; i < 10; i++) {
		printf("%d ", a[i]);
	}
	return 0;
}

int main() {
	int a[10] = {0};
	one(a);
	two(a);
	three(a);
	return 0;
}
在路上 2年前 回复TA
#include<stdio.h>
int main()
{
	int a[10];
	int  i;
	int max=a[0],min=a[0];
	for(i=0;i<10;i++)
	{
		scanf("%d",&a[i]);
		
	}
	int  k;
	int  t;
	for(i=0;i<10;i++)
	{
		if(min>a[i])
		{
		  min=a[i];k=i;	
		}
	}
	t=a[0];
	a[0]=a[k];
	a[k]=t;
	int  j;
	for(i=0;i<10;i++)
	{
		if(max<a[i])
		{
		max=a[i];j=i;
		}
	}
	t=a[9];
	a[9]=a[j];
	a[j]=t;
	for(i=0;i<10;i++)
	{
	printf("%d\t",a[i]);	
	}
	
}这是我的
czhang 2年前 回复TA
@czhang 找到问题了,不能同时找最大值和最小值,要分开找。
czhang 2年前 回复TA
我这个答案错误50%,可以帮忙看看是哪里出了问题吗?
#include<stdio.h>
int a[10];
int put(){
	for(int i=0;i<10;i++){
		scanf("%d",&a[i]);
	}	
}
void deal(){
	int m=0;
	int n=0;
	for(int i=1;i<10;i++){
		if(a[i]<a[m])
		m=i;
		if(a[i]>a[n])
		n=i;	
	}
	int tmp=a[0];
	a[0]=a[m];
	a[m]=tmp;
	tmp=a[9];
	a[9]=a[n];
	a[n]=tmp;
}
int output(){
    for(int i=0;i<10;i++){
		printf("%d ",a[i]);
	}	
}
int main(){
	put();
	deal();
	output();	
}
kekeke 2年前 回复TA
@kekeke 最后少了点东西 没复制上
kekeke 2年前 回复TA
不知道为啥答案错一半

#include<stdio.h>
#include<stdlib.h>
void Input(int*m);
void Change(int*m);
void Output(int*m);
int main()
{
    int n[10];
    Input(n);
    Change(n);
    Output(n);
    system("pause");
    return 0;
}
void Input (int*m)
{
    for(int i=0;i<10;i++){
        scanf("%d",&m[i]);
    }
}
void Change (int*m)
{

    for(int i=9;i>0;i--){
        int maxd=0;
        for(int j=0;j<i+1;j++){
            if(m[j]>m[maxd])maxd=j;
        }
        int temp=m[i];
        m[i]=m[maxd];
        m[maxd]=temp;
    }
}
void Output(int*m)
{
    for(int i=0;i<10;i++){
        printf("%d")
}}
笑一个好不好 2年前 回复TA
@笑一个好不好 救救孩子,真的是不会做了,做出来总是不能全对
笑一个好不好 2年前 回复TA
@笑一个好不好 #include<stdio.h> #define N 10 void scan(int* a) { 	int i; 	for (i = 0; i < N; i++) 		scanf_s("%d", a + i); } void dispose(int* a) { 	int i, j, max, min, n, m; 	for (i = 0; i < N; i++) 	{ 		min = *(a + i); 		max = *(a + N - 1 - i); 		n = -1; 		m = -1; 		for (j = i; j < N ; j++) 		{ 			if (min > *(a + j)) 			{ 				min = *(a + j); 				n = j; 			} 		} 			  if (n != -1) 			  { 				*(a + n) = *(a + i); 				*(a + i) = min; 			  } 			  for (j = 0; j < N-i ; j++) 			  { 				  if (max < *(a + j)) 				  { 					  max = *(a + j); 					  m = j; 				  } 			  } 			if (m != -1) 			{ 				*(a + m) = *(a + N - i - 1); 				*(a + N - i - 1) = max; 			} 	} } void print(int* a) { 	int i = 0; 	for (i = 0; i < N; i++) 		printf("%d ", *(a + i)); } int main() { 	int a[N]; 	scan(a); 	dispose(a); 	print(a); 	return 0; }
笑一个好不好 2年前 回复TA
#include<stdio.h>
#define N 10
void scan(int* a)
{
	int i;
	for (i = 0; i < N; i++)
		scanf("%d", a + i);
}
void dispose(int* a)
{
	int i, j, max, min, n, m;
	for (i = 0; i < N; i++)
	{
		min = *(a + i);
		max = *(a + N - 1 - i);
		n = -1;
		m = -1;
		for (j = i; j < N ; j++)
		{
			if (min > *(a + j))
			{
				min = *(a + j);
				n = j;
			}
		}
			  if (n != -1)
			  {
				*(a + n) = *(a + i);
				*(a + i) = min;
			  }
			  for (j = 0; j < N-i ; j++)
			  {
				  if (max < *(a + j))
				  {
					  max = *(a + j);
					  m = j;
				  }
			  }
			if (m != -1)
			{
				*(a + m) = *(a + N - i
陈志超 2年前 回复TA
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
    int main() {
    int p[10],i,x=10000,j,pp[10],k=0,kk=0,h;
    for(i=0;i<=9;i++)
    scanf("%d ",&p[i]);
    for(i=0;i<=9;i++)
    pp[i]=p[i];
    for(i=0;i<=9;i++){
    	for(j=i+1;j<=9;j++){
    	if(p[i]>p[j])
    	{   
    		x=p[i];
    		p[i]=p[j];
    		p[j]=x;
    	}
		}
    }
    for(i=0;i<=9;i++)
    {
    	if(p[0]!=pp[i])
    	k++;
    	else break;
    }
        x=pp[0];
        pp[0]=pp[k];
        pp[k]=x;
    for(i=0;i<=9;i++)
    {
    	if(p[9]!=pp[i])
    	kk++;
    	else break;
    }
        h=pp[9];