洛谷 P1157 組合的輸出

2021-10-08 08:29:23 字數 1195 閱讀 8454

排列與組合是常用的數學方法,其中組合就是從nn個元素中抽出rr個元素(不分順序且r \le n)r≤n),我們可以簡單地將nn個元素理解為自然數1,2,…,n1,2,…,n,從中任取rr個數。

現要求你輸出所有組合。

例如n=5,r=3n=5,r=3,所有組合為:

12 3 , 1 2 4 , 1 2 5 , 1 3 4 ,1 3 5 , 1 4 5 , 2 3 4 , 2 3 5 , 2 4 5 , 3 4 5123,124,125,134,135,145,234,235,245,345

一行兩個自然數n,r(1所有的組合,每乙個組合佔一行且其中的元素按由小到大的順序排列,每個元素佔三個字元的位置,所有的組合也按字典順序。

**注意哦!輸出時,每個數字需要33個場寬,pascal可以這樣:

write(ans:3);

輸入 #1複製

5 3
輸出 #1複製

1  2  3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

分析:

這題不難,和上題一樣,用陣列a存數,用mark陣列來存1和0,對mark陣列進行全排列,mark中為0的輸出(因為next-permutation函式是從小到大排,但是要求按照字典序,第乙個輸出就是最大,所以如果按mark==1才輸出a[i],那麼只能輸出乙個,所以反其道而行之,mark==0時輸出,或者乾脆用prev_permutation函式,從大到小全排列),就可以達到題目要求

注意:題目中有個坑,就是乙個元素佔三個字元,如果你的數字只有一位,那麼就在前面加兩個空格,如果有兩位,前面加乙個空格即可,題主就是因為這個小問題,wa了四個資料

上ac**:

#include#include#includeusing namespace std;

int n;

int r;

int a[25];

int mark[25];

int main()

}while(next_permutation(mark+1,mark+n+1));

return 0;

}

洛谷P1157 組合的輸出

題目描述 排列與組合是常用的數學方法,其中組合就是從 nn 個元素中抽出 rr 個元素 不分順序且 r le n r n 我們可以簡單地將 nn 個元素理解為自然數 1,2,n1,2,n 從中任取 rr 個數。例如 n 5,r 3n 5,r 3 所有組合為 12 3 1 2 4 1 2 5 1 3 ...

洛谷 P1157 組合的輸出

題目描述 排列與組合是常用的數學方法,其中組合就是從nn個元素中抽出rr個元素 不分順序且r le n r n 我們可以簡單地將nn個元素理解為自然數1,2,n1,2,n,從中任取rr個數。現要求你輸出所有組合。例如n 5,r 3n 5,r 3,所有組合為 12 3 1 2 4 1 2 5 1 3 ...

P1157 組合的輸出

排列與組合是常用的數學方法,其中組合就是從n個元素中抽出r個元素 不分順序r n 我們可以簡單地將n個元素理解為自然數1,2,n從中任取r個數。現要求你輸出所有組合。例如n 5,r 3所有組合為 12 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5...