はまやんはまやんはまやん

hamayanhamayan's blog

Triple Recursion [HackerRank Week of Code 35 B]

https://www.hackerrank.com/contests/w35/challenges/triple-recursion

N行N列の行列aがあり、以下のルールでこの行列を埋めていく。

  • i=0かつj=0なら a[i][j] = M
  • i=jなら a[i][j] = a[i -1][j - 1] + K
  • i>jなら a[i][j] = a[i - 1][j] - 1
  • i<jなら a[i][j] = a[i][j - 1] - 1

行列aを構築し、答えよ。

解法

真のやるだけ問題。
行列の表示の方法にはいくつかあるが、自分はこの方法がお気に入り。

int N, M, K, a[101][101];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> M >> K;
    rep(i, 0, N) rep(j, 0, N) {
        if (i == 0 and j == 0) a[i][j] = M;
        else if (i == j) a[i][j] = a[i - 1][j - 1] + K;
        else if (i > j) a[i][j] = a[i - 1][j] - 1;
        else if (i < j) a[i][j] = a[i][j - 1] - 1;
    }

    rep(i, 0, N) {
        rep(j, 0, N) {
            if (j) printf(" ");
            printf("%d", a[i][j]);
        }
        printf("\n");
    }
}