排列與組合是常用的數學方法,其中組合就是從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...