三个数中取出最大的两个

来源:互联网 发布:柯桥区干部网络学堂 编辑:程序博客网 时间:2024/04/30 04:51

深深感觉自己智商不够用
其实上一篇笔记并没有写完,还有求一个数组中最大的两个数的问题,但是在自己编写这个问题的程序的时候,突然脑残的卡在了三个数的大小比较上!瞬间怒了!!!决定要把三个数的比较问题和算法好好研究下!治治自己的脑残!!! ~~~~~~~~~~~~~~~~


问题描述:在三个数(a,b,c)中取出最大的两个数
x1,x2分别存放最大的数和第二大的数,不适用指针,且暂且不考虑有相同的值

1.最开始的思路是这样的……

if(a>b)    if(a>c){ //a最大        x1=a;        if(b>c)//b第二大            x2=b;        else   //c第二大            x2=c;    }else{   //c最大,a第二大        x1=c;        x2=a;    }else{    if(b>c){ //b最大        x1=b;        if(a>c) //a第二大            x2=a;        else  //c第二大            x2=c;    }else{ c最大,b第二大        x1=c;        x2=b;    }}

不知道是不自己智商太低了,在写上面的程序的时候思路很乱,感觉自己要被绕晕了~~~
而且感觉就这么一个简单的问题竟然要写这么多行!!!你能忍受自己的智商了!!!

2.后来又觉得从反面入手,会不会简单点……
先把最小的找出来,排除掉,然后比较剩下两个。

if(a<=b)    if(a<=c){ //a最小        x1=b;        x2=c;    }else{ //c最小        x1=b;        x2=a;    }else    if(b>=c){ //c最小        x1=a;        x2=b;    }else{   //b最小        x1=a;        x2=c;    }//保证x1,x2大小顺序if(x2>x1)     swap(x1.x2);

醉了。。。。怎么还是这么长。。。。难道真的没救了????

3.还是乖乖排序吧。。。。。。

//排序for(i=0;i<3;i++)    for(j=0;j<3-i;j++)        if(A[j]>A[j+1])            swap(A[j],A[j+1]);x1=A[2];x2=A[1];

代码量貌似少了,但是总感觉有点小题大做了,三个数而已,都用得着排序????

4.如果这样呢。。。。。。

x1=a;x2=b;if(x1<c)    x1=c;else if(x2<c)    x2=c;if(x1<x2)    swap(x1,x2);

好像好点了。。。。。也是醉了,深深感觉自己数据结构和算法这块知识是弱爆了~~~~~~~~

0 0