華為OJ 火車進站(棧,字典排序)

2022-04-06 00:49:33 字數 1269 閱讀 7303

給定乙個正整數n代表火車數量,0樣例輸入:

1 2 3

樣例輸出:

1 2 3

1 3 2

2 1 3

2 3 1

3 2 1

解答:其實核心就是乙個棧,對於第k個數,在第k個數進棧之前,前面的 k-1 個數要麼全部出去了,要麼都在棧裡面,要麼部分在棧裡面部分出去了。那麼可以假想,在第k個數入棧之前,依次從棧裡面出去 0個、1個、2個……棧.size()個,然後把第k個入棧,再對於 k+1個同樣實施這樣的方法——這就是個遞迴了。

出去了的儲存在乙個佇列裡面,沒出站的儲存在棧裡面,最後一輛車處理完了遞迴結束並輸出。

#include #include 

#include

using

namespace

std;

intn;

int *parr=null;

void handle(int index, stack s, vector v,vectorint> >&res)

//再處理這個,把它放到棧頂

stemp.push(parr[index]);

if (n-1==index)

res.push_back(vres);

}else

} }

void swap(vectorint> >& d,int low,int

high)

}int compare(vector a1,vectora2)

}}void fast_sort(vectorint> >& d,int low,int

high)

swap(d,low,left);

fast_sort(d,low,left-1

); fast_sort(d,left+1

,high);

}void dictionary_sort(vectorint> >&d)

v_tmp.push_back(tmp);

}fast_sort(d,

0,v_tmp.size()-1

);

return

; }

}int main(void)

delete

parr;

}

函式 void dictionary_sort()是對得到的結果按字典序排序。字典序排序的具體方法為快速排序法,由於資料比較小,也可用氣泡排序法。

參考:  華為oj—火車進站(棧,字典排序)

華為OJ(成績排序)

描述 查詢和排序 題目 輸入任意 使用者,成績 序列,可以獲得成績從高到低或從低到高的排列,相同成績 都按先錄入排列在前的規則處理。例示 jack 70 peter 96 tom 70 smith 67 從高到低 成績 peter 96 jack 70 tom 70 smith 67 從低到高 sm...

華為 OJ 成績排序

查詢和排序 題目 輸入任意 使用者,成績 序列,可以獲得成績從高到低或從低到高的排列,相同成績 都按先錄入排列在前的規則處理。例示 jack 70 peter 96 tom 70 smith 67 從高到低 成績 peter 96 jack 70 tom 70 smith 67 從低到高 smith...

字典序全排序 permutation 火車進出站

描述 給定乙個正整數n代表火車數量,0 n 10,接下來輸入火車入站的序列,一共n輛火車,每輛火車以數字1 9編號。要求以字典序排序輸出火車出站的序列號。輸入 有多組測試用例,每一組第一行輸入乙個正整數n 0 n 10 第二行包括n個正整數,範圍為1到9。輸出 輸出以字典序排序的火車出站序列號,每個...