紙媒体で管理するとなくなりがちなのでブログで進捗などを管理することにしました
※殆どの記事は自分自身のためだけにかいています.他人に見せられるレベルには至っていません...

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);
        }
    }
}