プログラミング

【競プロ精進日記】c++習得編<19>

本記事は管理人が競技プログラミングを始めたため,その精進日記としてログを取ったものです。アウトプットして積極的にモチベーションを上げていく作戦です。まずはc++を習得するところから始めます。その他の記事は以下をご覧ください。

内容は管理人の推測や恣意的な感想を大いに含みます。もし間違い等ありましたらご指摘ください。あくまでも参考程度にお願い致します。

【競プロ精進日記】目次まとめ ABC Atcoder Beginner Contestの過去問を解いています。最低限のコメントと一言が添えられています。 ...

参照

C++入門 AtCoder Programming Guide for beginners (APG4b)を1からさらっていく内容です。

#include <bits/stdc++.h>
using namespace std;

// 参照渡しを用いて、呼び出し側の変数の値を変更する
void saiten(vector<vector<int> > &A, int &correct_count, int &wrong_count) {
  for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
      if (A.at(i).at(j)==(i+1)*(j+1)){
        correct_count++;
      }
      else{
        A.at(i).at(j)=(i+1)*(j+1);
        wrong_count++;
      }
    }
  }
}

int main() {
  vector<vector<int>> A(9, vector<int>(9));
  for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
      cin >> A.at(i).at(j);
    }
  }

  int correct_count = 0;
  int wrong_count = 0;

  saiten(A, correct_count, wrong_count);

  for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
      cout << A.at(i).at(j);
      if (j < 8) cout << " ";
      else cout << endl;
    }
  }
  cout << correct_count << endl;
  cout << wrong_count << endl;
}

いやー。いよいよ難しくなってきました。c言語ならではの参照というやつです。要するに,参照というのは主に関数の呼び出しなどで無駄なコピーを防ぐために利用されることが多いようですね。

pythonの場合はミュータブルオブジェクトとイミュータブルオブジェクトで参照渡しと値渡しのような挙動を示します。

今回も詰まったのは,インデックスが0始まりなのか1始まりなのか,という点です。前回同様に0始まりに揃えることにしました。例題の形式的に「与えられたコードを元に答えなさい」というものだったので,今回は配列の要素に「.at()」でアクセスしたり,for文をきちんと書いたりしました。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です