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

C语言 码拜 8年前 (2016-04-25) 934次浏览
现在本人有三个数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协议进行授权 , 转载请注明关于三个数特殊的排序问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)