whoami

学んだことや考えたことのアウトプットをします。AtCoder@japanesekeigo Twitter@keigopiano

Bubble Sort

AOJの問題
Aizu Online Judge

みんな大好きBubble Sort
一回のfor文で対象配列の一番最大(または一番最小)を決めることができるやつだと思ってたらこいつは違った。
Python 3系で実装

def printer(A):
    ret = str(A[0])
    for i in range(1, len(A)):
        ret += " " + str(A[i])
    print(ret)
    return True


def bubblesort(A):
    ret = 0
    flag = True
    num = len(A)
    while flag is True:
        flag = False
        for i in reversed(range(1, num)):
            if A[i - 1] > A[i]:
                tmp = A[i - 1]
                A[i - 1] = A[i]
                A[i] = tmp
                flag = True
                ret += 1
        # num -= 1
    return ret


n = int(input())
A = list(map(int, input().split()))

ans = bubblesort(A)
# print(A)
printer(A)
print(ans)

isPrime

AOJの問題
Aizu Online Judge

Python 3系で実装
filter関数やlambda関数を使ってみた。

なんか美しくはない気がする。もっと綺麗にかけないものかね。

def isPrime(num):
    if num == 2 or num == 3:
        return True
    elif num % 2 == 0:
        return False

    p = 3
    sqrt_num = int(num ** 0.5)
    while True:
        if num % p == 0:
            return False

        if sqrt_num >= p:
            p += 2
        else:
            return True


n = int(input())
input_num = [int(input()) for _ in range(n)]

print(len(list(filter(lambda x: isPrime(x), input_num))))

Greatest Common Divisor

AOJの問題
Aizu Online Judge

ユークリッドの互除法
特に言うことなし。Python 3系で書いた。
そういや、証明はできんな・・・なんでなんやろ・・・

def gcd(a, b):
    la = max(a, b)
    sm = min(a, b)
    if la % sm == 0:
        return sm
    else:
        return gcd(sm, la % sm)


a, b = map(int, input().split())
print(gcd(a, b))

AOJプログラミング入門 9_A:Finding a Word

問題
Aizu Online Judge

C++で解いた。全部小文字にするのはめんどくさいね。

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;


string strlower(string str){
    for(int i=0, l=str.size();i<l;i++){
        if(str[i]>='A'&&str[i]<='Z')str[i]+=('a'-'A');
    }
    return(str);
}


int main(){
    string input = "";
    string search = "";

    cin >> search;
    int ans=0;
    while(cin >> input){
        if(input == "END_OF_TEXT")break;
        if(strlower(input)==strlower(search))ans++;
    }
    cout << ans << endl;
    return 0;
}