未分類

APG4b(Ex16~Ex19)

メモ

範囲for文

for (配列の要素の型 変数名 : 配列変数) {
  // 各要素に対する処理
}

多次元配列

vector<vector<要素の型>> 変数名(要素数1, vector<要素の型>(要素数2, 初期値))

参照

参照先の型 &参照の名前 = 参照先;

参照の参照(int a=3; int &b  = a; int &c = b;)は、参照を参照ではなく直接参照になる。
関数宣言の引数を&参照にすると、関数で行った変更が参照先の変数も変更する。関数から外部変数を更新。

Ex19

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

// 参照渡しを用いて、呼び出し側の変数の値を変更する
void saiten(vector<vector<int>> &A, int &correct_count, int &wrong_count /* 呼び出し側に対応するように引数を書く */)
{
    // 呼び出し側のAの各マスを正しい値に修正する
    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
            {
                wrong_count++;
                A.at(i).at(j) = (i + 1) * (j + 1);
            }
        }
    }
    // Aのうち、正しい値の書かれたマスの個数を correct_count に入れる
    // Aのうち、誤った値の書かれたマスの個数を wrong_count に入れる

    // ここにプログラムを追記
}

// -------------------
// ここから先は変更しない
// -------------------
int main()
{
    // A君の回答を受け取る
    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;   // ここに誤った値のマスの個数を入れる

    // A, correct_count, wrong_countを参照渡し
    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;
}

Ex18

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

int main()
{
    int N, M;
    cin >> N >> M;
    vector<int> A(M), B(M);
    for (int i = 0; i < M; i++)
    {
        cin >> A.at(i) >> B.at(i);
    }
    vector<vector<char>> score(N, vector<char>(N));
    for (int i = 0; i < N; i++)
    {
        for (int n = 0; n < N; n++)
        {
            score.at(i).at(n) = '-';
        }
    }
    for (int i = 0; i < M; i++)
    {
        score.at(A.at(i) - 1).at(B.at(i) - 1) = 'o';
        score.at(B.at(i) - 1).at(A.at(i) - 1) = 'x';
    }
    for (int i = 0; i < N; i++)
    {
        for (int n = 0; n < N; n++)
        {
            cout << score.at(i).at(n);
            if (n + 1 < N)
            {
                cout << ' ';
            }
        }
        cout << endl;
    }
    return 0;
}

Ex17

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

int main()
{
    int N, S;
    cin >> N >> S;
    vector<int> A(N), P(N);
    int count = 0;
    for (int i = 0; i < N; i++)
    {
        cin >> A.at(i);
    }
    for (int i = 0; i < N; i++)
    {
        cin >> P.at(i);
    }
    for (int i = 0; i < N; i++)
    {
        for (int n = 0; n < N; n++)
        {
            if (A.at(i) + P.at(n) == S)
            {
                count++;
            }
        }
    }
    cout << count << endl;
}

Ex16

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

int main()
{
    vector<int> data(5);
    for (int i = 0; i < 5; i++)
    {
        cin >> data.at(i);
    }
    bool equal = false;
    for (int i = 0; i < 4; i++)
    {
        if ((data.at(i) - data.at(i + 1)) == 0)
        {
            equal = true;
        }
    }
    if (equal)
    {
        cout << "YES" << endl;
    }
    else if (!equal)
    {
        cout << "NO" << endl;
    }
    // dataの中で隣り合う等しい要素が存在するなら"YES"を出力し、そうでなければ"NO"を出力する
    // ここにプログラムを追記
}

 

-未分類