[伯俊/c+]15650号:NとM(2)


質問リンク-https://www.acmicpc.net/problem/15650

質問する



に答える

  • NとM(1)の問題は、解答方法とよく似ています(対応する解答を参照)
  • の違いは、均一な数列が昇順であるべきであることである.
  • の数列の次の位置を決定する関数はfunc(index+1,n,m)であり、関数パラメータにstartを追加してクエリの開始位置を決定する.
    -index位置でiが定義されている場合、start位置にi+1が導入され、func(index+1,i+1,n,m)関数によってfor文のiがi+1から始まり、index+1の位置がデジタルi+1から始まる.
  • コード#コード#

    //15650. N과M(2)
    #include <iostream>
    using namespace std;
    
    bool check[10];
    int arr[10];
    
    void func(int index, int start, int n, int m){
        if(index>m){
            for(int i=1; i<=m; i++){
                cout<<arr[i]<<" ";
            }
            cout<<"\n";
            return;
        }
    
        for(int i=start; i<=n; i++){
            if(check[i])
            continue;
    
            check[i]=true;
            arr[index]=i;
            func(index+1,i+1,n,m);
            check[i]=false;
    
        }
    }
    
    int main(){
        int n,m;
        cin>>n>>m;
        func(1,1,n,m);
    
    }