#29662: C語言解答


d2513850 (林勇智)

學校 : 崑山科技大學
編號 : 5102
來源 : [27.53.131.137]
最後登入時間 :
2024-11-17 10:12:31
h206. 強者就是要戰,但......什麼才是強者呢? | From: [220.138.154.83] | 發表日期 : 2022-03-19 01:58

//函數輸入:指標a,下界編號lbnd,上界編號ubnd,比較規則cp

//函數輸出:比較結果cmp

int cmp(int *a,int lbnd,int ubnd,int cp){

    int mbnd;

    if(lbnd==ubnd){//下界編號-上界編號==0:人數只有1個

        return *(a+lbnd);//直接輸出

    }else if(lbnd>ubnd){//下界編號-上界編號>0:直接交換下界編號與上界編號

        return cmp(a,ubnd,lbnd,cp);

    }else{

        mbnd=(lbnd+ubnd)/2;//計算下界編號與上界編號的中間值

        if(cp==1){//若大者優先

            if(cmp(a,lbnd,mbnd,cp^1)>cmp(a,mbnd+1,ubnd,cp^1)){//比較規則變成小者優先:1^1=0

                return cmp(a,lbnd,mbnd,cp^1);

            }else{

                return cmp(a,mbnd+1,ubnd,cp^1);

            }

        }else if(cp==0){//小者優先

            if(cmp(a,lbnd,mbnd,cp^1)<cmp(a,mbnd+1,ubnd,cp^1)){//比較規則變成大者優先:0^1=1

                return cmp(a,lbnd,mbnd,cp^1);

            }else{

                return cmp(a,mbnd+1,ubnd,cp^1);

            }

        }else{//兩個都不是

            return 0;

        }

    }

}

 

 
ZeroJudge Forum