求最大值和次大值

        

复制代码
void main()
{
    int a,b=0,i,j,k,g,z=0;
    int num[20][10]={{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}};
    int Max[20][2]={{0},{0}};
    scanf("%d",&a);                          ////////数据组数
    if(a<=0){
        exit(0);
    }
    for(i=0;i<a;i++){
        scanf("%d",&j);                      ////////每组数据个数
        for(k=0;k<j;k++){
            scanf("%d",&num[i][k]);
        }
        for(j=k-1;j>0;j--){                  /////////一组结束冒泡排序
            for(g=k-1;g>0;g--){
                if(num[i][g]>num[i][g-1]){
                    b=num[i][g];
                    num[i][g]=num[i][g-1];
                    num[i][g-1]=b;
                }
            }
        }
        Max[i][0]=num[i][0];
        while(num[i][z]>=Max[i][0]){
            z++;
        }
        Max[i][1]=num[i][z];
        z=0;
    }
    for(i=0;i<a;i++){
        printf("%d %d\n",Max[i][0],Max[i][1]);
    }
}
复制代码

      题目中让我们来求输入数据的最大值和次大值。最开始我是想在数组中直接对其进行排序,然后输出数组的第一个和第二个数。但是,我没有考虑到重复数据的问题,所以我进行了一些改进,想将最大值找出来以后保存入另一个数组,再将最大值与剩下的数进行比较,第一个小于它的数就是次大值。

      这个问题解决以后,我发现,输入多组数据时,二维数组的数据比较难处理,需要一个变量保存每一组数据的数据个数,比较麻烦,所以,我就将数据处理直接放到了输入数据之后。输入一组数据,马上进行处理,这样数据个数不需要另外保存,还提高了运行效率

posted @   PerseusQ  阅读(1470)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示