ABC029_C

'a','b','c'から構成できるn文字の文字列を全て挙げる問題.
n=2ならaa,ab,ac,ba,bb,bc,ca,cb,cc

文字が増えていくので文字列と文字列の長さを引数にした関数を作ればよい.

#include <bits/stdc++.h>
using namespace std;
char alphabet[4] = {'a','b','c'};
int n;

void solve(string s,int cnt){
    if(cnt == 0){//作っている文字列の長さがnならば
        cout<<s<<endl;
        return;
    }
    //作っている文字列の長さがn以下ならば
    //'a','b','c'のどれかを挿れる
    for(int i=0;i<3;i++){
        solve(s+alphabet[i],cnt-1);
    }
}
int main()
{
    cin>>n;
    string s = "";
    solve(s,n);
    return 0;
}

ifでreturn文使うよりもelse文を使ったほうが個人的には綺麗だと感じた.

void solve(string s,int cnt){
    if(cnt == 0){//作っている文字列の長さがnならば
        cout<<s<<endl;
    }else{
        for(int i=0;i<3;i++){
            solve(s+alphabet[i],cnt-1);
        }
    }
}