模擬題 Loli的排列組合

2021-07-06 07:45:32 字數 3839 閱讀 7538

loli說得分前八六個的都是清華北大了,23333333333

1、 pl.cpp輸入一行字母(長度小於等於10),輸出:第一行輸出全排列個數,從下一行開始按字典序輸出這些字母所有可能的排列,每行乙個。(資料保證無重複字母)

2、 zh.cpp第一行輸入乙個字串,(長度小於等於15)第二行輸入乙個數字m,輸出:第一行輸出從這個字串裡面選出m個的組合數,從下一行開始按字典序輸出可能的組合(每個組合也要把字母按字典序排好,每行乙個。)(資料保證無重複字母)

3、 np.cpp輸入一行字母(長度小於等於26),輸出它所有的全排列裡面,按字典序排在它後面的那個。(資料保證無重複字母)

4、 xh.cpp第一行輸入乙個字串,第二行輸入乙個數字m,輸出這些字母的全排列裡面按字典序排名m的序列。(資料保證無重複字母)

5、 bh.cpp輸入一行字母輸出它在這些字母的全排列裡面按字典序的序號。(資料保證無重複字母)

7、 zht.cpp第一行輸入乙個字串(長度小於等於15可能有重複字母),第二行輸入乙個數字m,輸出:第一行輸出從這個字串裡面選出m個的組合數,從下一行開始按字典序輸出可能的組合(每個組合也要把字母按字典序排好,每行乙個。)

t1 dfs putchar()輸出

#include

#include

#include

#include

using

namespace

std;

char a[16],s[16];int l,m;bool b[16];

inline

void print()

inline

int pl(int fr,int to)

inline

void dfs(int now,int k)

for(int i=k;iif(!b[i])

}}int main()

t2 改改t1** dfs到m即可

#include

#include

#include

#include

using

namespace

std;

char a[11];char s[11];bool b[11];int l;int jc[11]=;

inline

void print()

inline

void dfs(int now)

for(int i=0;iif(!b[i])

}}int main()

t3 模擬回溯過程

#include

#include

#include

#include

using

namespace

std;

char a[27],s[27];int l;bool b[27];bool flag;

inline

int find(char c)

inline

bool behind(char c)

inline

void print()

inline

void hs(int now)

for(int i=0;iif(!b[i]) s[++now]=a[i];

print();

}else

}int main()

t4 查詢第vi位置單詞

#include

#include

#include

#include

using

namespace

std;

char a[100001];char s[100001];bool b[10001];long

long l,m,t;

inline

void print()

inline

long

long pl(int to)

inline

int find1(int t)

}inline

int find2(char c)

}int main()

print();

fclose(stdin);fclose(stdout);return

0;}

t5 查詢位置權值

#include

#include

#include

#include

using

namespace

std;

char a[100005],s[100005];int l;long

long ans;

bool b[100005];

inline

long

long pl(int to)

inline

int find1(char c)

}inline

int find2(char c)

}int main()

cout

<1;

fclose(stdin);fclose(stdout);return

0;}

t6 統計重複字母排列組合 加字母判重

ans=n!/(n1!*n2!*n3!…nn!);

n1+n2+n3+…+nn=n;//每個字母重複次數

#include

#include

#include

#include

using

namespace

std;

char a[11];char s[11];bool b[11];int l,t,tt,ans=1;int jc[11]=;

bool use[11][260];bool cf[11];

inline

void print()

inline

void dfs(int now)

for(int i=0;iif(!(b[i])&&(!use[now][a[i]]))

}memset(use[now],0,sizeof(use[now]));

}int main()

printf("%d\n",jc[l]/ans);

dfs(0);fclose(stdin);fclose(stdout);return

0;}

t7 其實懶得敲

#include

#include

#include

#include

using

namespace

std;

char a[16],s[16];int l,m,t,tt,ans;bool b[16];

bool use[11][260];bool cf[11];

inline

void print()

inline

int pl(int fr,int to)

inline

void dfs1(int now,int k)

for(int i=k;iif(!(b[i])&&(!use[now][a[i]]))

}memset(use[now],0,sizeof(use[now]));

}inline

void dfs(int now,int k)

for(int i=k;iif(!(b[i])&&(!use[now][a[i]]))

}memset(use[now],0,sizeof(use[now]));

}int main()

圍成一圈的排列組合問題 排列組合問題模擬練習題

模擬練習題一 某單位安排五位工作人員在星期一至星期五值班,每人一天且不重複。若甲 乙兩人都不能安排在星期五值班,則不同的排班方法共有 種。a.6b.36 c.72 d.120 正確答案 c 中公解析 www.zgsydw.com 題幹中要求甲 乙不能安排在星期五,所以優先考慮從其他三人中選一人安排在...

C 經典演算法題 排列組合

將一組數字 字母或符號進行排列,以得到不同的組合順序,例如1 2 3這三個數的排列組合有 1 23 1 32 2 13 2 31 3 12 3 21。可以使用遞迴將問題切割為較小的單元進行排列組合,例如1 2 3 4的排列可以分為 1 2 34 2 13 4 3 1 24 4 12 3 進行排列,這...

組合數學之排列組合若干題

poj1833 題目連線 題意 中文題目題意不多說,只是用到了stl裡面的next permutation 函式 next permutation op1,op2 最後乙個排列時返回null include include include include include includeusing n...