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

扭扭捏捏 2年前 回复TA
#include<stdio.h>
void my_input(int* arr)
{
    int i;
    for(i=0;i<10;i++)
    scanf("%d",(arr+i));
}

void paixu(int* arr)
{
    int temp1,temp2,x,y;
    int i;
    temp1=*(arr+0);
    temp2=*(arr+9);
    for(i=0;i<9;i++)
    {
        if(temp1>*(arr+i))
        temp1=*(arr+i),x=i;
        if(temp2<*(arr+i))
        temp2=*(arr+i),y=i;
    }
    temp1=*(arr+0);
    *(arr+0)=*(arr+x);
    *(arr+x)=temp1;
    temp2=*(arr+9);
    *(arr+9)=*(arr+y);
    *(arr+y)=temp2;
}

void my_output(int* arr)
{
    int i;
    for(i=0;i<10;i++)
    printf("%d ",*(arr+i));
}

为什么只有五十分;
Esther 2年前 回复TA
@Esther @uq_88410785464 确实,粗心大意了。
今天你也学英语了嘛 2年前 回复TA
@Esther 人家只移动两个位置你用冒泡排序排了整个
Esther 2年前 回复TA
@Esther #include<stdio.h> int main() { 	int arr[10]; 	for(int i=0;i<10;i++) 	{ 	    scanf("%d",&arr[i]); 	} 	most(arr); 	return 0; } void most(int arr[10]) {     char b[10];     int max,min;     int i,j;     for(i=0;i<10;i++)     {         b[i]=arr[i];     }     for(i=0;i<9;i++)     {         for(j=0;j<9-i;j++)         {             if(b[j]>b[j+1])             {                 int temp;                 temp=b[j];                 b[j]=b[j+1];                 b[j+1]=temp;             }         }     }     for(int k=0;k<10;k++)     {          if(arr[k]==b[0])         {             int temp;             temp=arr[k];             arr[k]=arr[0];             arr[0]=temp;         }         if(arr[k]==b[9])         {             int temp;             temp=arr[k];             arr[k]=arr[9];             arr[9]=temp;         }         printf("%d",arr[k]);          printf(" ");     }     return 0; }上面这个没复制完
Esther 2年前 回复TA
我
#include<stdio.h>
int main()
{
	int arr[10];
	for(int i=0;i<10;i++)
	{
	    scanf("%d",&arr[i]);
	}
	most(arr);
	return 0;
}
void most(int arr[10])
{
    char b[10];
    int max,min;
    int i,j;
    for(i=0;i<10;i++)
    {
        b[i]=arr[i];
    }
    for(i=0;i<9;i++)
    {
        for(j=0;j<9-i;j++)
        {
            if(b[j]>b[j+1])
            {
                int temp;
                temp=b[j];
                b[j]=b[j+1];
                b[j+1]=temp;
            }
        }
    }
    for(int k=0;k<10;k++)
    {

        if(arr[k]==b[0])
        {
            int temp;
  那个错了?
accyuri 2年前 回复TA
@御心 题目只要求第一个和最后一个
Rare 2年前 回复TA
#include<stdio.h>
int main()
{
    int a[10];
    for(int i=0;i<10;i++){scanf("%d",&a[i]);}
    for(int i=0;i<10;i++){int b;for(int j=i+1;j<10;j++){if(a[i]>a[j]){
		b=a[i];
        a[i]=a[j];
        a[j]=b;
    }}}
    for(int i=0;i<10;i++){printf("%d ",a[i]);}
    printf("\n");
}
这哪错误了,我不懂,说答案不对,我输进去值发现没不对的啊
AkMoney 2年前 回复TA
@陆崇瑞 还是交换错了,改变了下标的原因,10 1 2 3 4 5 6 7 8 9,这个数据就不行,还是楼主说的原因
hero 3年前 回复TA
#include <stdio.h>
	int min(int a[]);
	int max(int a[]);
	void exchange(int*a,int*b,int c);
	int main(){
	int a[10];int k;int j;int i;int c;
	
	for(i=0;i<10;i++){
	scanf("%d",&a[i]);}
	k=min(a);
	exchange(&a[k],&a[0],c);
	j=max(a); 
	exchange(&a[j],&a[9],c);
	for(i=0;i<10;i++){
	printf("%d ",a[i]);
	}
	return 0;}
	
	int min(int a[]){
	int i,j,isprime = 1;int c;
	for(i=0;i<10;i++){ isprime =1;
	for(j=0;j<10;j++){ if(a[i]>a[j]){ isprime =0; break;
	}
	} if(isprime==1){ c=i;break;}
	}
	return c;}  
	
	void exchange(int*a,int*b,int c)
	{
	c=*a;*a=*b,*b=c;}
	
	int max(int a[]){
	int i,j,isprime =
浅梦 3年前 回复TA
#include <stdio.h>
#include <string.h>
int fun1 (int a[10])
{
	int i;
	for(i=0;i<10;i++)
	{
		scanf("%d",&a[i]);
	}
}
int fun2(int a[10])
{
	int min,max,c,b,s,i;
	c=0;b=0;
	min = a[0];max=a[0];
	for(i=1;i<10;i++)
	{
		if(a[i]<min)
		{
			min=a[i];
			c=i;
		}
		if(a[i]>max)
		{
			max=a[i];
			b=i;
		}
	}
	s=a[b];a[b]=a[9];a[9]=s;
	s=a[c];a[c]=a[0];a[0]=s;
    }
int fun3(int a[10])
{
	int i;
	for(i=0;i<10;i++)
	{
		printf("%d ",a[i]);
	 } 
}
int main ()
{
	int a[10];
	fun1(a);
	fun2(a);
	fun3(a);
 }