[伯俊/c+]15649号NとM(1)


15649問題リンク

質問する


自然数NとMが与えられた場合、以下の条件を満たすすべての長さMの数列を解くプログラムを作成します.
  • 1からNまで、自然水体中でM個の数列
  • を繰り返し選択する.

    入力


    第1行は自然数NとMを与える.(1 ≤ M ≤ N ≤ 8)

    しゅつりょく


    各行に問題条件を満たす数列を出力します.重複する数列は複数回出力できません.各数列はスペースで区切らなければなりません.
    数列は予め増加した順序で出力しなければならない.

    に答える


    10947番すべてのシーケンスと解題方法はほぼ似ています.コードでインデックスを比較し、配列の値を出力する条件は、次のとおりです.if (idx == N)からif (idx == M)に変更すればいいです.

    ソースコード

    #include <stdio.h>
    #include <iostream>
    
    using namespace std;
    
    int N;
    int M;
    int visited[9];
    int output[9];
    
    void permutation(int idx) {
        
        if (idx == M) {
            for(int i=0; i<M; i++) {
                cout << output[i] << " ";
            }
            cout << '\n';
        }
        
        for(int i=0;i<N;i++) {
            if (visited[i] != true) {
                visited[i] = true;
                output[idx] = i+1;
                permutation(idx+1);
                visited[i] = false;
            }
        }
        
    }
    
    int main() {
        cin >> N >> M;
        permutation(0);
    }
    

    正解