首页 > 试题广场 >

(全排列)下面程序的功能是利用递归方法生成从1到n(n10

[填空题]

(全排列)下面程序的功能是利用递归方法生成从1n(n<10)n个数的全部可能的排列(不一

定按升序输出)。例如,输入3,则应该输出(每行输出5个排列):

123 132 213  231 321

312


程序:

#include <iostream.h>
#include <iomanip.h>
int n, a[10];  // a[1],a[2],…,a[n]构成n个数的一个排列 
long count = 0;  // 变量count记录不同排列的个数,这里用于控制换行
void perm(int k) {
    int j, p, t;
    if ( 1 ) {
        count++;
        for (p = 1; p <= n; p++) cout << setw(1) << a[p];
        cout << "  ";
        if (  2 )  cout << endl;
        return;
    }
    for (j = k; j <= n; j++) {
        t = a[k];
        a[k] = a[j];
        a[j] = t;
        3;
        t = a[k];
        4;
    }
}
void main(void) {
    int i;
    cout << "Entry n:" << endl;
    cin >> n;
    for (i = 1; i <= n; i++) a[i] = i;
    5;
} 



#include <iostream.h>
#include <iomanip.h>
int n, a[10];  // a[1],a[2],…,a[n]构成n个数的一个排列 
long count = 0;  // 变量count记录不同排列的个数,这里用于控制换行
void perm(int k) {
    int j, p, t;
    if ( ‌k >= n ) {
        count++;
        for (p = 1; p <= n; p++) cout << setw(1) << a[p];
        cout << "  ";
        if ( count % 5 == 0 ‌ )  cout << endl;
        return;
    }
    for (j = k; j <= n; j++) {
        t = a[k];
        a[k] = a[j];
        a[j] = t;
        ‌perm(k+1);
        t = a[k];
        ‌a[k] = a[j];
        a[j] = t;
    }
}
void main(void) {
    int i;
    cout << "Entry n:" << endl;
    cin >> n;
    for (i = 1; i <= n; i++) a[i] = i;
    ‌perm(1);

发表于 2022-04-17 16:18:05 回复(0)
有会的吗
发表于 2022-04-17 15:01:52 回复(0)