北大機試題 全排列

2021-08-16 09:36:30 字數 1018 閱讀 2902

題目描述

給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。 我們假設對於小寫字母有'a' < 'b' < ... < 'y' < 'z',而且給定的字串中的字母已經按照從小到大的順序排列。

輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。
輸出這個字串的所有排列方式,每行乙個排列。要求字母序比較小的排列在前面。字母序如下定義:

已知s = s1s2...sk , t = t1t2...tk,則s < t 等價於,存在p (1 <= p <= k),使得

s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。

每組樣例輸出結束後要再輸出乙個回車。

示例1

abc

abc

acbbac

bcacab

cba

思路:本題在基本的全排列基礎上,需注意乙個地方。輸出按照字典序順序輸出,那麼在輸入後,需按字典序排列一次;每次交換後尋找n-1的排列時需按字典序排列,但是不要改變原先序列。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

void swap(char *a,char *b)

void full(char source,int begin,int end) else

strcpy(sour,source);//需要拷貝,遞迴迴圈,不改變原先序列

sort(sour+begin+1,sour+end);

full(sour,begin+1,end);

if(begin!=i) }}

return;

}int main()

return 0;

}

浮點數加法 北大機試題

整數部分存入棧中,方便計算 小數部分先存入字元陣列中,等相加以後,再把結果存入棧中 再計算整數部分,結果存入棧中 不難,就是寫起來有點麻煩 include include includeusing namespace std stackx1inter,x2inter stackresultfloat...

歷屆試題 帶分數 (全排列)

問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格式 從標準輸入讀入乙個正整數n n 1000 1000 輸出格式 ...

46 全排列 全排列 遞迴

遞迴的時候每次確定乙個位置的數字 nums陣列在遞迴過程中分為左右兩部分,左邊部分是已經確定好的部分,而右邊是待確定數字的部分。每次都嘗試用當前位置右邊的數字來交換當前數字以確定當前數字。題目可以使用collections來優化。詳見 class solution 遞迴過程中每次確定乙個位置的數,遞...