Code Bye

关于三个数特殊的排序问题

现在本人有三个数n[0],n[1],n[2],分别为三个方向的距离值
现在本人需要得到一个方向,这个方向的n值最大,及找出数组n中最大值其对应的方向。例如n[0]>n[1]>n[2],则选择方向0.
假如n[0]=n[1]>n[2]则需要从0和1方向任意选择一个方向(rand函数来选择)
若n[0]=n[1]=n[2]则从012中任意选择一个方向。
希望高手能给出一个短一点的效率高一点程序啊,本人这只会用if来做,但是真的好长啊。而且不适用于方向很多的时候。
解决方案

5

int n[3]={1,2,3};
int max;
max=n[0];
int count=0;     //初始方向0;
for(int i=0;i<2;i++)
{
if(n[i]<=n[i+1])
max=n[i+1];
count=i+1;
}
printf(“%d\n%d\n”,max,count);

10

printf(“%d”,(n0>n1? n0:n1)>n2?(n0>n1? n0:n1):n2);

70

这个世界上最大的差别和最远的距离都存在于“说”和“做”之间。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int n[3],m[3];
int i,j,k,t;
int main() {
    srand(time(NULL));
    for (k=0;k<100;k++) {
        for (i=0;i<3;i++) {
            n[i]=rand()%4;
            m[i]=i;
        }
        printf("%02d:%d %d %d ",k,n[0],n[1],n[2]);//第0..99次的三个数
        for (i=0;i<2;i++) {
            for (j=i+1;j<3;j++) {
                if (n[i]<n[j]) {
                    t=n[i];n[i]=n[j];n[j]=t;
                    t=m[i];m[i]=m[j];m[j]=t;
                }
            }
        }
        if (n[0]==n[1] && n[1]==n[2]) {
            i=rand()%3;//最大的三个都相等,随机选其中一个
        } else if (n[0]==n[1]) {
            i=rand()%2;//最大的两个都相等,随机选其中一个
        } else i=0;
        printf(" [%d] %d\n",m[i],n[i]);//选第[]个,值
    }
    return 0;
}
//00:1 1 3  [2] 3
//01:2 1 2  [0] 2
//02:1 2 2  [2] 2
//03:1 1 2  [2] 2
//04:3 3 2  [0] 3
//05:3 1 3  [2] 3
//06:2 0 2  [0] 2
//07:2 3 2  [1] 3
//08:0 2 1  [1] 2
//09:1 0 0  [0] 1
//10:1 1 3  [2] 3
//11:2 3 0  [1] 3
//12:3 2 2  [0] 3
//13:2 3 0  [1] 3
//14:0 1 3  [2] 3
//15:1 1 0  [0] 1
//16:1 0 3  [2] 3
//17:2 1 2  [0] 2
//18:3 3 0  [0] 3
//19:1 1 3  [2] 3
//20:2 3 0  [1] 3
//21:3 3 0  [0] 3
//22:0 3 1  [1] 3
//23:0 0 3  [2] 3
//24:0 0 0  [2] 0
//25:0 2 0  [1] 2
//26:2 3 1  [1] 3
//27:2 1 2  [2] 2
//28:2 2 0  [1] 2
//29:2 3 1  [1] 3
//30:2 2 0  [0] 2
//31:1 1 1  [2] 1
//32:2 2 0  [0] 2
//33:2 0 1  [0] 2
//34:3 0 2  [0] 3
//35:3 0 0  [0] 3
//36:1 2 1  [1] 2
//37:2 3 1  [1] 3
//38:0 0 0  [0] 0
//39:2 1 3  [2] 3
//40:3 3 0  [1] 3
//41:3 1 0  [0] 3
//42:3 1 1  [0] 3
//43:1 3 1  [1] 3
//44:3 3 0  [1] 3
//45:0 1 1  [1] 1
//46:0 1 3  [2] 3
//47:3 1 1  [0] 3
//48:2 0 0  [0] 2
//49:1 1 3  [2] 3
//50:2 0 3  [2] 3
//51:3 3 1  [1] 3
//52:2 2 3  [2] 3
//53:2 1 2  [0] 2
//54:3 1 3  [0] 3
//55:3 0 0  [0] 3
//56:2 1 0  [0] 2
//57:3 3 3  [0] 3
//58:1 3 3  [1] 3
//59:0 3 1  [1] 3
//60:1 2 1  [1] 2
//61:2 2 0  [0] 2
//62:0 1 3  [2] 3
//63:3 2 2  [0] 3
//64:1 0 3  [2] 3
//65:1 0 2  [2] 2
//66:2 1 2  [2] 2
//67:1 3 1  [1] 3
//68:1 2 3  [2] 3
//69:1 0 1  [2] 1
//70:2 0 3  [2] 3
//71:2 3 1  [1] 3
//72:3 2 3  [2] 3
//73:3 1 3  [2] 3
//74:1 0 0  [0] 1
//75:2 2 1  [1] 2
//76:2 2 3  [2] 3
//77:2 1 2  [0] 2
//78:2 3 3  [1] 3
//79:1 2 0  [1] 2
//80:1 0 3  [2] 3
//81:1 0 0  [0] 1
//82:0 0 1  [2] 1
//83:1 0 0  [0] 1
//84:2 1 0  [0] 2
//85:1 1 2  [2] 2
//86:0 0 0  [0] 0
//87:1 3 2  [1] 3
//88:1 0 2  [2] 2
//89:0 1 3  [2] 3
//90:3 0 2  [0] 3
//91:2 3 2  [1] 3
//92:1 1 2  [2] 2
//93:3 1 3  [0] 3
//94:2 2 2  [1] 2
//95:1 1 2  [2] 2
//96:1 1 1  [2] 1
//97:0 2 0  [1] 2
//98:3 3 1  [1] 3
//99:3 1 2  [0] 3
//

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于三个数特殊的排序问题