完善程序:(排列数)输入两个正整数n, m (1 ≤n ≤20, 1 ≤m ≤n),在 1~n 中任取 m 个数,按字典序从小到大输出所有这样的排列。例如
输入
3 2
输出:
1 21 32 12 33 13 2
#include
#include
using namespace std;
const int SIZE = 25;
bool used[SIZE];
int data[SIZE];
int n, m, i,j, k;
bool flag;
int main()
{
\tcin>>n>>m;
\tmemset(used, false, sizeof(used));
\tfor (i = 1; i <= m; i )
\t{
\t\tdata[i] = i;
\t\tused[i] = true;
\t}
\tflag = true;
\twhile (flag)
\t{
\t\tfor (i = 1; i <= m-1; i ) cout<
\t\tcout<
\t\tflag = ① ;
\t\tfor (i = m; i >= 1; i--)
\t\t{
\t\t\t ② ;
\t\t\tfor (j = data[i] 1; j <= n; j ) if (!used[j])
\t\t\t{
\t\t\t\tused[j] = true;
\t\t\t\tdata[i] = ③ ;
\t\t\t\tflag = true;
\t\t\t\tbreak;
\t\t\t}
\t\t\tif (flag)
\t\t\t{
\t\t\t\tfor (k = i 1; k <= m; k )
\t\t\t\t\tfor (j = 1; j <= ④ ; j ) if (!used[j])
\t\t\t\t\t{
\t\t\t\t\t\tdata[k] = j;
\t\t\t\t\t\tused[j] = true;
\t\t\t\t\t\tbreak;
\t\t\t\t\t}
\t\t\t\t\t ⑤ ;
\t\t\t}
\t\t}
\t}
}
发表评论 取消回复