43 藍橋杯之撲克排序

2021-10-04 11:32:18 字數 1573 閱讀 6948

a a 223

344, 一共4對撲克牌。請你把它們排成一行。

要求:兩個a中間有1張牌,兩個2之間有2張牌,兩個3之間有3張牌,兩個4之間有4張牌。

請填寫出所有符合要求的排列中,字典序最小的那個。

例如:22aa3344 比 a2a23344 字典序小。當然,它們都不是滿足要求的答案。

請通過瀏覽器提交答案。「a」一定不要用小寫字母a,也不要用「1」代替。字元間一定不要留空格。

#include

#include

#include

using namespace std;

bool check(const string &s)

using namespace std;

int main(

)while

(next_permutation(s.begin(

),s.end())

);return0;

}

用全排列就可以做。對string裡的資料進行全排列是需要注意

next_permutation(s.begin(),s.end())來表示全排列的開始和結束位置

string s=「223344aa」;需要這樣子按序拍才能被全排列(還沒有去搞懂為什麼。。。。)3322不能全排列,3214中 用next_permutation()進行排列1,2都沒有出現過在前面

string 字串的rfind()函式和find()函式,乙個是從後面往前找,乙個是前面往後找。下標相減,應該是後面的下標減去前面的下標,即 s.rfind(『a』)-s.find(『a』) 而不是s.find(『a』)-s.rfind(『a』)

兩個a中間有1張牌,兩個2之間有2張牌,兩個3之間有3張牌,兩個4之間有4張牌。中間有1張牌,下標相減應該差2!!

//

if(s.rfind(

'a')

-s.find(

'a')==1

&&s.rfind(

'2')

-s.find(

'2')==2

&&'3')

-s.find(

'3')==3

&&s.rfind(

'4')

-s.find(

'4')==4

)//中間有1張牌,下標相減應該差2!!

if(s.rfind(

'a')

-s.find(

'a')==2

&&s.rfind(

'2')

-s.find(

'2')==3

&&s.rfind(

'3')

-s.find(

'3')==4

&&s.rfind(

'4')

-s.find(

'4')==5

)

加不加const這題結果都一樣

check(const string &s)

//引數不能在函式中被修改

check(string s)

藍橋杯 撲克排序 2014 A 6

a a 2 2 3 3 4 4,一共4對撲克牌。請你把它們排成一行。要求 兩個a中間有1張牌,兩個2之間有2張牌,兩個3之間有3張牌,兩個4之間有4張牌。請填寫出所有符合要求的排列中,字典序最小的那個。例如 22aa3344 比 a2a23344 字典序小。當然,它們都不是滿足要求的答案。請通過瀏覽...

藍橋杯 撲克序列

a a 2 2 3 3 4 4,一共4對撲克牌。請你把它們排成一行。要求 兩個a中間有1張牌,兩個2之間有2張牌,兩個3之間有3張牌,兩個4之間有4張牌。請填寫出所有符合要求的排列中,字典序最小的那個。例如 22aa3344 比 a2a23344 字典序小。當然,它們都不是滿足要求的答案。請通過瀏覽...

撲克序列 藍橋杯

請通過瀏覽器提交答案。a 一定不要用小寫字母a,也不要用 1 代替。字元間一定不要留空格。一直感覺這樣的填空題應該能用暴力方法破解就用暴力方法解,因為暴力方法思路簡單,容易實現,而且因為是填空題,對程式執行時間沒有限制,這樣就可以省下設計漂亮演算法所花費的時間。這道題也是用暴力演算法解決。用乙個長度...