二次元配列の練習問題
問題概要
の形状に並べられた行列が与えられる。行列の各要素は 0 以上 26 以下の整数値である。
今、この行列の各要素に対応して
- 0 は文字 '.' に
- 1〜26 はそれに対応するアルファベット文字に
置き換えて得られる の二次元文字列を出力せよ。
考えたこと
の形状に並べられた行列 は、C++ では vector<vector<int>>
型で管理できる。たとえば、次のように宣言する。
vector<vector<int>> A(H, vector<int>(W));
そして、この行列 の上から 番目 (一番上を 0 番目とする)、左から 番目 (一番左を 0 番目とする) の要素 は、プログラムでは A[i][j]
と表せる。また、行列 の各要素にアクセスする処理は、次のような二重 for
文で表せる。
for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { // A[i][j] に関する処理 } }
このことに注意して、実装していこう。
コード
#include <bits/stdc++.h> using namespace std; int main() { int H, W; cin >> H >> W; vector<vector<int>> A(H, vector<int>(W)); for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { cin >> A[i][j]; } } for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { if (A[i][j] == 0) cout << '.'; else cout << (char)('A' + A[i][j] - 1); } cout << endl; } }