🙆‍♀️

AIZU ONLINE JUDGEで問題を解いてみた

2022/07/23に公開

競プロのサイト

AIZU ONLINE JUDGEというサイトの問題を解いていきます。

Insert Sort

1行目 入力数
2行目 入力

sample input
6
5 2 4 6 1 3
sample output
5 2 4 6 1 3
2 5 4 6 1 3
2 4 5 6 1 3
2 4 5 6 1 3
1 2 4 5 6 3
1 2 3 4 5 6
code1.cpp
#include <iostream>
using namespace std;

void trace(int A[], int n) {
    for (int i = 0; i < n; i++) {
        if (i > 0) cout << " ";
        cout << A[i];
    }
    cout << endl;
}

void InsertSort(int A[], int n) {
    for (int i = 0; i < n; i++) {
        int v = A[i];
        int j = i - 1;
        while (j >= 0 && A[j] > v) {
            A[j + 1] = A[j];
            j--;
        }
        A[j + 1] = v;
        trace(A, n);
    }
}


int main() {
    int n;
    int N = 100;
    int A[N];

    cin >> n;
    for (int i = 0; i < n; i++) cin >> A[i];

    InsertSort(A, n);
    return 0;
}

Greatest Common Divisor

sample input
54 20
sample output
2

直感的に、最大公約数を求めてみる
どちらでも割り切れる最大の数を求める

code2_1.cpp

#include <iostream>
using namespace std;
int a, c;

int mmcm() {
    int result = 0;
    if (a > c) {
        for (int i = c; i >= 1; i--) {
            if (a % i == 0 && c % i == 0) return i;
        }
    } else if (a < c) {
        for (int i = a; i >= 1; i--) {
            if (a % i == 0 && c % i == 0) return i;
        }
    } else {
        result = a;
    }
    return result;
}

int main() {
    cin >> a >> c;
    int result;
    result = mmcm();
    cout << result << endl;
    return 0;
}

数が大きくなると、処理時間が長くなるので改良

ユークリッド互除法を用いてコードを書く

code2_2.cpp
#include <iostream>
#include <algorithm>
using namespace std;

int gcd(int x, int y) {
    int r;
    if (x < y) swap(x, y);
    while (y > 0) {
        r = x % y;
        x = y;
        y = r;
    }
    return x;
}

int main() {
    int a, b;
    cin >> a >> b;
    cout << gcd(a, b) << endl;
    return 0;
}

Prime Numbers

1行目 入力数
2行目以降 入力

sample input
7
1
2
3
4
5
6
7
sample output
4
code3.cpp
#include <iostream>

using namespace std;

int MAX = 10000;

int pm_bool(int p) {
    int r = 0;
    int i = 2;
    bool key = true;
    if (p <= 1) {
        return r;
    }
    while (key) {
        if (p % i == 0) {
            if (p == i) {
                r = 1;
            }
            key = false;
        }
        i++;
    }
    return r;
}

int main() {
    int n;
    int p[MAX];
    cin >> n;
    int result = 0;
    for (int i = 0; i < n; i++) {
        cin >> p[i];
        result = result + pm_bool(p[i]);
    }
    cout << result << endl;
    return 0;
}

Bubble Sort

sample input
5
5 3 2 4 1
sample output
1 2 3 4 5
8
code4.cpp
#include <iostream>
using namespace std;

int BubbleSort(int A[], int N) {
    int sw = 0;
    bool flag = 1;
    for (int i = 0; flag; i++) {
        flag = 0;
        for (int j = N - 1; j >= i + 1; j--) {
            if (A[j] < A[j - 1]) {
                swap(A[j], A[j -1]);
                flag = 1;
                sw++;
            }
        }
    }
    return sw;
}

int main() {
    int A[100], N, sw;

    cin >> N;
    for (int i = 0; i < N; i++) cin >> A[i];
    sw = BubbleSort(A, N);
    for (int i = 0; i < N; i++) {
        if (i) cout << " ";
        cout << A[i];
    }
    cout << endl;
    cout << sw << endl;

    return 0;

    return 0;
}

続きはこちら

Discussion