三つの数の真ん中
整数 a, b, c が一行に空白区切りで与えられる。
三つを大きさの順に並べたとき真ん中に来る数を出力せよ。
同じ数があってもよい(例:5 5 1 なら真ん中は 5)。
ソート関数やリストの並べ替えを使わず、比較だけで解いてみよう。
- 入力
- -1,000,000,000 ≤ a, b, c ≤ 1,000,000,000
- 出力
- 真ん中の数を一つ
3 9 5
5
5 5 1
5
整数 a, b, c が一行に空白区切りで与えられる。
三つを大きさの順に並べたとき真ん中に来る数を出力せよ。
同じ数があってもよい(例:5 5 1 なら真ん中は 5)。
ソート関数やリストの並べ替えを使わず、比較だけで解いてみよう。
3 9 5
5
5 5 1
5
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
同じ値があるときが落とし穴です。a < b < c or c < b < a のように < だけを使うと、5 5 1 はどの分岐にも入らず最後の else に落ちます。
先に a >= b で二つに分け、その中で c の位置を聞けば(入れ子の条件)同じ値も漏れなく入ります。
比較をつなげる a < b < c が数学どおりに読めるのは Python だけです。
C・C++・Java・C#・JS では a < b && b < c と分けて書きます(C・C++・JS では a < b < c も文法上は通りますが、(a < b) の真偽(1/0、true/false)を c と比べるという別の意味になります)。
JS・TS は入力を Number に変えないと文字列比較("10" < "9" が真)になります。
Craykon は もし (a >= b) { もし (…) { } でなければ { } } のように中にもう一度書きます。
分岐の中で初めて作った変数は外で使えない(Java・C#・C・C++ も同じ)ので、mid は分岐の前に作っておきます。
Python は違い、if の中で作った変数も外から見えます。
a, b, c = map(int, input().split())if a >= b: if b >= c: mid = b # a >= b >= c elif a >= c: mid = c # a >= c > b else: mid = a # c > a >= belse: if a >= c: mid = a # b > a >= c elif b >= c: mid = c # b >= c > a else: mid = b # c > b > aprint(mid)const [a, b, c] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);let mid;if (a >= b) { if (b >= c) mid = b; else if (a >= c) mid = c; else mid = a;} else { if (a >= c) mid = a; else if (b >= c) mid = c; else mid = b;}console.log(mid);import { readFileSync } from "node:fs";const [a, b, c]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);let mid: number;if (a >= b) { if (b >= c) mid = b; else if (a >= c) mid = c; else mid = a;} else { if (a >= c) mid = a; else if (b >= c) mid = c; else mid = b;}console.log(mid);import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(), b = sc.nextInt(), c = sc.nextInt(); int mid; if (a >= b) { if (b >= c) mid = b; else if (a >= c) mid = c; else mid = a; } else { if (a >= c) mid = a; else if (b >= c) mid = c; else mid = b; } System.out.println(mid); }}using System; class Program{ static void Main() { int[] v = Array.ConvertAll(Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries), int.Parse); int a = v[0], b = v[1], c = v[2]; int mid; if (a >= b) { if (b >= c) mid = b; else if (a >= c) mid = c; else mid = a; } else { if (a >= c) mid = a; else if (b >= c) mid = c; else mid = b; } Console.WriteLine(mid); }}#include <iostream> int main() { int a, b, c, mid; std::cin >> a >> b >> c; if (a >= b) { if (b >= c) mid = b; else if (a >= c) mid = c; else mid = a; } else { if (a >= c) mid = a; else if (b >= c) mid = c; else mid = b; } std::cout << mid << "\n";}#include <stdio.h> int main(void) { int a, b, c, mid; scanf("%d %d %d", &a, &b, &c); if (a >= b) { if (b >= c) mid = b; else if (a >= c) mid = c; else mid = a; } else { if (a >= c) mid = a; else if (b >= c) mid = c; else mid = b; } printf("%d\n", mid); return 0;}v = コンソール.数読み();a = v[0];b = v[1];c = v[2];mid = 0;もし (a >= b){ もし (b >= c) { mid = b; } でなければ もし (a >= c) { mid = c; } でなければ { mid = a; }}でなければ{ もし (a >= c) { mid = a; } でなければ もし (b >= c) { mid = c; } でなければ { mid = b; }}コンソール.書く(mid);