Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AOJ PG入門#2

Last updated at Posted at 2025-01-15

問1:2つの整数 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:3つの整数a, b, cを読み込み、それらが a < b < cの条件を満たすならば"Yes"を、満たさないならば"No"を出力するプログラムを作成して下さい。

YesまたはNoを1行に出力して下さい。

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:3つの整数を読み込み、それらを値が小さい順に並べて出力するプログラムを作成して下さい。

小さい順に並べ替えた3つの整数を1行に出力して下さい。整数の間に1つの空白を入れて下さい。

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 と1行に出力してください。

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();
    }
}


0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?