三个数的中间值
一行给出三个整数 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);