AOJ PG入門#2

## 問1:２つの整数 a, b を読み込んで、a と b の大小関係を出力するプログラムを作成して下さい。
a より b の方が大きければ
```
a < b
```
a より b の方が小さければ、
```
a > b
```
a と b が等しければ、
```
a==b
```
と出力して下さい。

### PHP
```AOJ.php
<?php

fscanf(STDIN, "%d %d", $a, $b);

if ($a > $b) {
    echo "a > b";
} elseif ($a < $b) {
    echo "a < b";
} else {
    echo "a == b";
}

echo PHP_EOL;
```

### Java
```AOJ.java
import java.util.Scanner;
public class Main{
    public static void main(String[]args){
     Scanner sc=new Scanner(System.in);   
     int a = sc.nextInt();
     int b = sc.nextInt();
     
     if(a > b){
      System.out.println("a > b");
    }else if(a < b){
        System.out.println("a < b");
    }else{
       System.out.println("a == b"); 
        }
    }
}

```

## 問2:３つの整数a, b, cを読み込み、それらが a < b < cの条件を満たすならば"Yes"を、満たさないならば"No"を出力するプログラムを作成して下さい。
YesまたはNoを１行に出力して下さい。
### PHP
```AOJ.php
<?php
fscanf(STDIN,"%d %d %d",$a,$b,$c);
echo $a<$b&&$b<$c?"Yes\n":"No\n";
?>
```


### Java
```AOJ.java
import java.util.Scanner;
public class Main{
    public static void main(String[]args){
       Scanner sc = new Scanner(System.in); 
       int a = sc.nextInt();
       int b = sc.nextInt();
       int c = sc.nextInt();
       
       String result = (a<b&&b<c)?"Yes":"No";
       System.out.println(result);
    }
}

```
- System.out.println は自動で改行ので\nは不要
- 三項演算子は値を返すためSystem.out.println のようなメソッド呼び出しは三項演算子の中で直接使用できない。そのため変数に値を入れて、そのあと出力処理をするようにしている。

## 問3:３つの整数を読み込み、それらを値が小さい順に並べて出力するプログラムを作成して下さい。
小さい順に並べ替えた３つの整数を１行に出力して下さい。整数の間に１つの空白を入れて下さい。
### PHP
```AOJ.php
<?php
fscanf(STDIN,"%d %d %d",$a,$b,$c);
$arr = array($a,$b,$c);
sort($arr);
echo implode(" ",$arr)."\n";
?>
```
- sort()関数は配列を昇順に並べ替えるPHPの組み込み関数
- implode()関数は配列の要素を1つの文字列に結合する。ここではimplode(" ", $arr)で、並べ替えた配列の要素を空白区切りの文字列に結合している。

### 別解
```Other.php
<?php

$a = explode(' ', trim(fgets(STDIN)));  // 標準入力から整数を読み込んで配列に変換
sort($a);  // 配列を昇順に並べ替え
echo implode(' ', $a) . PHP_EOL;  // 配列を空白区切りで文字列に変換して出力
?>

```
- trim() で空白や改行を除いた文字列を再び空白（' '）で区切り、配列の要素として変換。入力が 3 1 2 であれば、$a 312になってから [3, 1, 2] という配列になる。

### Java
```AOJ.java
import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[]args){
        Scanner sc = new Scanner(System.in);
        int arr[] = new int[3];
        for(int i=0;i<3;i++){
            arr[i] = sc.nextInt();
        }
        Arrays.sort(arr);
        System.out.println(arr[0]+" "+arr[1]+" "+arr[2]);
    }
}

```
- 配列の要素をソートするためにArraysクラスをインポートしsortメソッドを用いる。
- sortメソッドは配列の要素を自然順（数値の場合は小さい順）にソートする。

### 別解（Arraysクラスを使わないでソート）
```other.java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      
        Scanner scanner = new Scanner(System.in);

        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
  
        int first, second, third;

        if (a <= b && a <= c) {
            first = a;
            if (b <= c) {
                second = b;
                third = c;
            } else {
                second = c;
                third = b;
            }
        } else if (b <= a && b <= c) {
            first = b;
            if (a <= c) {
                second = a;
                third = c;
            } else {
                second = c;
                third = a;
            }
        } else {
            first = c;
            if (a <= b) {
                second = a;
                third = b;
            } else {
                second = b;
                third = a;
            }
        }
        System.out.println(first + " " + second + " " + third);
    }
}

```
## 問4:長方形の中に円が含まれるかを判定するプログラムを作成してください。
長方形は左下の頂点を原点とし、右上の頂点の座標 (W,H)が与えられます。また、円はその中心の座標 (x,y)と半径rで与えられます。
円が長方形の内部に含まれるなら Yes と、一部でもはみ出るならば No と１行に出力してください。
### PHP
```AOJ.php
<?php
list($W,$H,$x,$y,$r) = array_map('intval',explode(" ",trim(fgets(STDIN))));

//円の端の座標を計算
$left = $x-$r;
$right = $x+$r;
$under = $y-$r;
$top = $y+$r;

//円が長方形内に収まっているかの判定
if($left >= 0 && $right <= $W && $under >= 0 && $top <=$H){
    echo "Yes\n";
}else{
    echo "No\n";
}
?>
```
- list関数：配列と同様の形式で、複数の変数への代入を行う。list(変数)=配列で配列の各要素を変数に代入
- array_map:配列の要素全てに対して、指定した関数を適用させる。第一引数にコールバック関数名を指定する。
第二引数からはコールバック関数に適用する配列名を1つ又は複数指定する。今回は、array_map('intval', ...) で配列内の各要素を整数に変換する。

 ### 別解
 ```other.php
$input = explode(" ", trim(fgets(STDIN)));
$W = $input[0];
$H = $input[1];
$x = $input[2];
$y = $input[3];
$r = $input[4];

if (0 <= ($x - $r) && ($x + $r) <= $W && 0 <= ($y - $r) && ($y + $r) <= $H) {
    echo "Yes";
} else {
    echo "No";
}

 ```
### Java
```AOJ.java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int W = scanner.nextInt();
		int H = scanner.nextInt();
		int x = scanner.nextInt();
		int y = scanner.nextInt();
		int r = scanner.nextInt();

        if (x - r >= 0 && x + r <= W && y + r <= S && y - r >= 0) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }


        sc.close();
    }
}


```