问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

学霸大大请问这道题我这个程序哪错了。感激不尽

发布网友 发布时间:2024-06-26 11:51

我来回答

1个回答

热心网友 时间:2024-06-26 11:58

我感觉你这个好像没有错吧...

因为没用过你这个高级的extern int,所以自己大概仿制你的打了一个...调了几组数据,发现你的选择排序打错了.

你可以耐心看一下我下面的注释

#include<cstdio>

void fun(int a[10],int n){
    int i,j,t,k;
    //选择排序,然后取有序数列的第2第9项
    //其实可以只要一个for就能求次大次小...
    for(i=0;i<10;i++){
        for(int j=i+1;j<10;j++)
            if(a[i]<a[j]){
            //我感觉你这一段有问题...
            //如果我们比较a[k]和a[j],k是上一次选择的位置,但是现在放的是上一次交换过后放着的a[i],所以比较这两个数,对于已经更改过后的a[i],是没有意义的,有一种简单的改法就是直接每次都和a[i]比较,选择一个最大的放着这里.
                t=a[i],a[i]=a[j],a[j]=t;
            }
        
    }
    
    printf("the max2 is:%d\n",a[1]);
    printf("the min2 is:%d\n",a[8]);
}

int fac(int n,int m){
    int temp,r;
    if(n<m){
        temp=n,n=m,m=temp;
    }
    while(m!=0){
        r=n%m,n=m,m=r;
    }
    printf("the greatest divisor is:%d\n",n);//最大公约数就是最后剩下的n
    //printf("the last multiple is:\n");不知道这句问最后的倍数是干嘛?...
}

int main(){
    freopen("x.in","r",stdin);

    int a[10],i,d,c;
    
    printf("input numbers:\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    
    printf("input two numbers:\n");
    scanf("%d%d",&c,&d);
    
    fac(c,d);
    fun(a,10);
    return 0;
}
/*
随便造了一组样例
样例A:
input numbers: 2 3 4 6 7 8 9 5 1 10
input two numbers: 1024 672
the greatest divisor is:32
the max2 is:2
the min2 is:9
感觉是正确的

样例B:
input numbers: 200 1 24 58 14 99 156 142 258 233
input two numbers: 123456 654321
the greatest divisor is:3
the max2 is:58
the min2 is:233
这个好像就跑挂了,上去发现你选择排序的一个问题,然后修改了一下

更改过后的程序跑样例B:
input numbers: 200 1 24 58 14 99 156 142 258 233
input two numbers: 123456 654321
the greatest divisor is:3
the max2 is:233
the min2 is:14
现在是正确的了

*/

然后注释里说有一种只用一个for的做法...

主要思路很简单,就是如果当前数比最大值大,那么次大值就是以前的最大值,最大值是当前数;如果比最大值小或等于,却比次大值大,就之修改次大值.

void fun(int a[10],int n){
    int i;
    int INF=0x3f3f3f3f;//定义一个很大的数
    int max1=a[0],max2=-INF,min1=a[0],min2=INF;
    //max1表示最大值,max2表示次大值,min1,min2同理
    //先把最大最小初始化成a[0],其它两个初始化为无穷大和无穷小
    
    for(i=1;i<10;i++){
        if(a[i]>max1){ max2=max1,max1=a[i];}
        else if(a[i]>max2){ max2=a[i]; }
        
        if(a[i]<min1){ min2=min1,min1=a[i];}
        else if(a[i]<min2){ min2=a[i]; }
    }
    
    printf("the max2 is:%d\n",max2);
    printf("the min2 is:%d\n",min2);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 热水器60L一天耗电量是多少? 世界上有人看见过龙吗? 我想开家小吃店,但我无任何经验,希望有餐饮经验的朋友们指点一二 开家专门卖笔的小店儿,从零开始,请创业高手指点 河北省三河市李旗庄镇农经站办事效率低不作为, 想让windows支持linux命令,安装cygwin时,需要选择哪些 今天重庆的天气? 加减消元法如何用最小公倍数 南武实验学校设施环境 酱油会不会使人变黑 手缝了三针吃酱油会怎么样 酱油会导致皮肤变黑吗 今晚吃鱼,用了酱油,吃的时候滴了油汤在手上,结果手上有许多地方发黑,用... 紫藤能嫁接什么植物 ...第一个歌曲是首女的唱的英文歌,开头是 嗒。。嗒嗒嗒嗒,嗒。。嗒嗒嗒... pvc塑料拉链拉起来不大滑,请问要用什么润滑剂才可以拉起来润滑,_百度... 我是二婚,现在面临离婚,我该怎么办?他没有负担起一个男人的责任,没有给... 《离婚后,二婚女人的安全感》 贴吧说的pc是什么意思? 普通的pc显示屏配上vr app应用软件可以看3d影视吗 云南有哪些土特产推荐? 苹果手机回收平台哪个好 金乡县营业执照有补贴吗 如果打响指(求详细,求高手) 唐山佑安急救中心有限公司的营业执照是不是注销了? 唐山南湖路南区私家车去哪里开可以上高速的通行证 广发核心精选股票基金怎么样? 广发核心基金怎么样 主卧卫生间风水与化解方法 主卧卫生间风水如何改善 女孩子发hhh是什么意思啊? 如何展开折叠的excel表格内容? ...钱不值一目了然一字不缺一窍不通一清二楚一知半解一鼓作气归类_百度... 5G赋能工业的广泛应用:如何实现智慧工厂和机器人运维的升级? x浏览器如何使用油猴脚本? 赵才艳艺术签名怎么写 董明艳连笔字怎么写好看 帮忙写一下,谢谢 进口固体废物有哪些 海信中央空调未关机ab线短接后可出现什么故障 海信空调信号线与零线接错