paizaラーニングレベルアップ問題集Ｄランク問題をやってみた

paiza×Qiita記事投稿キャンペーンということで、まずは[paizaラーニング](https://paiza.jp/works/)レベルアップ問題集Dランク問題をやってみました。
- - -
# [足し算](https://paiza.jp/works/mondai/d_rank_skillcheck_sample/addition)
- Python3

    ```py
    a, b = map(int, input().split())
    print(a + b)
    ```
  - Python3では、標準入力から半角空白で区切られた2個の整数を受け取るには`a,b=map(int,input().split())`として受け取ります。
  - 2個の整数の和を`a+b`として、標準出力に出力（`print`）します。
- - -
# [一番小さい値](https://paiza.jp/works/mondai/d_rank_skillcheck_sample/min_num)
- Python3

    ```py
    n = [0] * 5
    for i in range(5):
        n[i] = int(input())
    print(min(n))
    ```
    - Python3では、要素数5の整数型一次元配列を宣言するには`n=[0]*5`とします。
    - その後、$i=0,1,2,3,4$（配列添字は0から始まります）に対して、標準入力から整数として受け取ります。
        - `for i in range(5):`で、$i=0,1,2,3,4$（$5$は含まれない）に対して`n[i]=int(input())`が実行されます。
    - 配列要素の最小値を求めるには`min`関数を使います。
    - 最初の値を仮の最小値として受け取り、最小値を更新していく方法もあります。
    ```py
    ans = int(input())  # 最初に受け取る整数値を暫定最小値とする
    for i in range(4):  # 残り4個の整数値を受け取る
        num = int(input())
        if num < ans:  # 小さい値が来たら更新
            ans = num
    print(ans)
    ```
    - Pythonでは、以下のように内包表記を使って一行で書くこともできます。
    ```py
    print(min(int(input()) for _ in range(5)))
    ```
- - -
# [文字の一致](https://paiza.jp/works/mondai/d_rank_skillcheck_sample/diff_str)
- Python3

    ```py
    a = input()
    b = input()
    if a == b:
        print("OK")
    else:
        print("NG")
    ```
    - 2つの文字列を受け取り、一致すれば`OK`、一致しなければ`NG`を出力します。
    - 言語によっては、`==`演算子では文字列の一致を比較できない言語があります。
　
- C

    ```c
    #include <stdio.h>
    #include <string.h>
    int main() {
    	char a[101];
    	scanf("%s", a);
    	char b[101];
    	scanf("%s", b);
    	if (strcmp(a, b) == 0) { //a==bでは文字列の一致性を比較できない
    		puts("OK");
    	} else {
    		puts("NG");
    	}
    	return 0;
    }
    ```
　
- Java

    ```java
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String a = sc.nextLine();
            String b = sc.nextLine();
            if (a.equals(b)) {// equalsを使う
                System.out.println("OK");
            } else {
                System.out.println("NG");
            }
            sc.close();
        }
    }
    ```
　
- C++

    ```cpp
    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
    	string a;
    	cin >> a;
    	string b;
    	cin >> b;
    	cout << (a == b ? "OK" : "NG") << endl;
    	return 0;
    }
    ```
    - C++で`std::cout`を使って三項演算子の結果を変数に代入しないで直接出力する場合、三項演算の部分（`<<`と`<<`の間）は括弧で囲まないと、演算子の優先順位の関係でエラーになります。
- - -
# [Eメールアドレス](https://paiza.jp/works/mondai/d_rank_skillcheck_archive/email_address)
- Python3

    ```py
    s = input()
    t = input()
    print(s + '@' + t)
    ```
    - 文字列を結合するには`+`演算子を使います。
    ```py
    s = input()
    t = input()
    print("%s@%s" % (s, t))
    ```
    - 書式設定して出力します。
　
- C++

    ```cpp
    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
    	string s;
    	cin >> s;
    	string t;
    	cin >> t;
    	cout << s << "@" << t << endl;
    	return 0;
    }
    ```
    - 標準入力から2つの文字列（ローカル部とドメイン）を受け取った後、標準出力にローカル部⇒＠⇒ドメインを順番に出力していきます。
- - -
# [N倍の文字列](https://paiza.jp/works/mondai/d_rank_skillcheck_archive/square)
- Python3

    ```py
    n = int(input())
    print('*' * n)
    ```
    - Pythonでは、`文字列*整数`で、文字列を整数回繰り返した文字列を生成します。
　
- C++
    
    ```cpp
	#include <iostream>
	using namespace std;
	int main() {
		int n;
		cin >> n;
		for (int i = 0; i < n; i++) {
			cout << '*';
		}
		cout << endl;
		return 0;
	}
    ```
    - `for`ループで、`*`を指定回数繰り返して出力します。
    　
    ```cpp
	#include <iostream>
	#include <string>
	using namespace std;
	int main() {
		int n;
		cin >> n;
		string s(n, '*');
		cout << s << endl;
		return 0;
	}
    ```
    - `string s(n,'*');`で、文字列変数`s`に`*`を`n`回繰り返した文字列が代入されます。