H2430821055


私信TA

用户名:dotcpp0790506

访问量:141

签 名:

摆烂大王

等  级
排  名 1691
经  验 2703
参赛次数 5
文章发表 5
年  龄 0
在职情况 学生
学  校 HZ University
专  业

  自我简介:

别卷我了微距了(T〰T)

TA的其他文章

解题思路:

我的解题思路比较简单,具体实现方法为:

1.创建一个数组,用于输入10个整数,之后将这10个整数进行排序,并储存进另一个数组里。

2.此时另一个数组里的第一项为最小值,最后一项为最大值,这样就找到了最大、最小值。

3.之后将最大、最小值赋值给变量min,max,然后在原数组里进行交换。

注意事项:

第3点交换时有一个坑,代码里我写了注释。


参考代码:

#include"stdio.h"

//定义全局变量
int a[10],n=0;
  
//因为自定义函数定义在main函数后面,所以要声明一下函数  
void input();
void calculate(int m[]);
void output(int m[]);
  
int main(){
    input();
    calculate(a);
    output(a);
    return 0;
}
  
//输入 
void input(){
    for(int i=0;i<10;i++){
    scanf("%d",&a[i]);
    ++n;//统计循环次数,下面冒泡排序会用到 
    }
}
  
//计算 
void calculate(int m[]){
    int x[10],y,z,min,max;
      //将a[]复制出一个副本,用于冒泡排序找出最大、最小值 
    for(int i = 0; i < n; ++i){ 
        x[i] = m[i];
    }
    //冒泡排序 
    for(int i=0;i<n-1;++i){
        for(int j=0;j<n-i-1;++j){
        	if(x[j]>x[j+1]){
                y=x[j+1];
                x[j+1]=x[j];
                x[j]=y;
            }
        }
    }
         
    //将最大、最小值赋给max、min 
    min=x[0];max=x[9];
      
     //找最小数并交换位置 
    for(int i=0;i<n;++i){
        if(m[i]==min){
            z=m[0];
            m[0]=m[i];
            m[i]=z;
            break; //找到最小值后交换位置并退出循环 ,下同 
        }
    }
    //找最大数并交换位置
    for(int i=0;i<n;++i){
        if(m[i]==max){
            z=m[9];
            m[9]=m[i];
            m[i]=z;
            break;
        }
    }
/*
    为什么用双循环而不是合并成一个循环?
    这里有个坑, 合并成一个循环的话,会导致只能交换最小值或最大值。
    举一个简单的例子
    如果代码这样写:
    for(int i=0;i<n;++i){
        if(m[i]==max){
            z=m[9];
            m[9]=m[i];
            m[i]=z;
            break;
        }else if(m[i]==min){
            z=m[0];
            m[0]=m[i];
            m[i]=z;
            break;
        }
    }
      
    那么此时执行代码会出现:
    输入:9 2 3 4 10 5 6 7 8 1
    输出:9 2 3 4 1 5 6 7 8 10
    (交换最大值还是交换最小值,取决于你最先进行的判断)
    可见,这里只交换了最大值,并没有交换最小值。 
*/ 
  
}
  
//输出 
void output(int m[]){
    for(int i = 0; i < 10; ++i){
    printf("%d ", m[i]);
    }
}


最后,我也是个初学者,解释可能有误,欢迎大佬指出错误!

 

0.0分

2 人评分

  评论区

如果有哪里看不懂,欢迎私信提问!
2024-10-27 19:14:44
  • «
  • 1
  • »