本記事は管理人が競技プログラミングを始めたため,その精進日記としてログを取ったものです。アウトプットして積極的にモチベーションを上げていく作戦です。まずは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言語ならではの参照というやつです。要するに,参照というのは主に関数の呼び出しなどで無駄なコピーを防ぐために利用されることが多いようですね。
今回も詰まったのは,インデックスが0始まりなのか1始まりなのか,という点です。前回同様に0始まりに揃えることにしました。例題の形式的に「与えられたコードを元に答えなさい」というものだったので,今回は配列の要素に「.at()」でアクセスしたり,for文をきちんと書いたりしました。