三日間の最高気温を見て、気温の流れを書き留める。 一行目に記録の数 n、続く n 行に記録ごとに一日目・二日目・三日目の気温 a, b, c が順に空白一つずつで区切って与えられる。 記録ごとに一行に、a < b < c なら "上昇"、a > b > c なら "下降"、それ以外なら "混在" を出力せよ。 二日以上同じ気温なら、だんだん上がったのでも下がったのでもないので "混在" である(例:3 3 5)。 上がってから下がる、下がってから上がるのも "混在" である。
入力
1 ≤ n ≤ 1,000、−50 ≤ a, b, c ≤ 50(整数)
出力
n 行、各行 up・down・mixed のいずれか
例 1 · stdin
4
3 8 12
12 8 3
5 9 2
4 4 6
stdout
上昇
下降
混在
混在
main.py
エラー一覧00F8 ↓ · ⇧F8 ↑
入力(stdin)
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
ほかの言語では?言語別の解答を見る · 8 言語の解答
数学のように a < b < c と書けるかどうかは言語ごとに違います。 これを a < b and b < c と読んでくれるのは Python だけです。 JS ではエラーなしに (a < b) < c として計算され、C・C++ も gcc ではそのままコンパイルされてそう計算します(-Wall を付けたときだけ警告が出ます。 最近の clang は既定でエラーで止めます)。 前の比較の true・false が 1・0 になって c と比べられるので、5 9 2 のように上がってから下がった記録も c が 1 より大きければ up になります。 Java・C# は boolean と int は比べられないというコンパイルエラーを出し、TS も boolean と number は比べられないという型エラーで止めてくれます。 Craykon は実行する前に「'a < b && b < c' のように二つに分けて書きます」と教えてくれます。 なので Python 以外では a < b && b < c のように二つに分けて書きます。 二つ目の落とし穴は境界です。 < の代わりに <= を使うと 3 3 5 が up になります。 三つ目の落とし穴は、読んだ文字列を数に変えないことです。 Python input().split() や JS split(" ") で分けた値は文字列なので、比較が文字順になり "9" < "10" が偽になります。 Python int、JS・TS Number、Craykon 数に で変えてから比べます。
Pythonmain.py · 10 行
n = int(input())for _ in range(n): a, b, c = map(int, input().split()) # Python은 a < b < c를 a < b and b < c로 읽는다 if a < b < c: print("上昇") elif a > b > c: print("下降") else: print("混在")
JavaScriptmain.js · 11 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);const out = [];for (let i = 1; i <= n; i++) { const [a, b, c] = lines[i].trim().split(/\s+/).map(Number); // a < b < c는 (a < b) < c가 되어 true/false를 c와 비교한다. 둘로 나눠 쓴다 if (a < b && b < c) out.push("上昇"); else if (a > b && b > c) out.push("下降"); else out.push("混在");}console.log(out.join("\n"));
TypeScriptmain.ts · 12 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const n: number = Number(lines[0]);const out: string[] = [];for (let i = 1; i <= n; i++) { const [a, b, c]: number[] = lines[i].trim().split(/\s+/).map(Number); // TS는 a < b < c를 타입 오류로 막는다(boolean과 number를 비교). 둘로 나눠 쓴다 if (a < b && b < c) out.push("上昇"); else if (a > b && b > c) out.push("下降"); else out.push("混在");}console.log(out.join("\n"));
JavaMain.java · 22 行
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine().trim()); StringBuilder out = new StringBuilder(); for (int i = 0; i < n; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); int c = Integer.parseInt(st.nextToken()); // a < b < c는 컴파일 오류다(boolean과 int는 비교할 수 없다) if (a < b && b < c) out.append("上昇\n"); else if (a > b && b > c) out.append("下降\n"); else out.append("混在\n"); } System.out.print(out); }}
C#Main.cs · 21 行
using System;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine().Trim()); var sb = new StringBuilder(); for (int i = 0; i < n; i++) { string[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); int a = int.Parse(p[0]), b = int.Parse(p[1]), c = int.Parse(p[2]); // a < b < c는 컴파일 오류다. 둘로 나눠 &&로 잇는다 if (a < b && b < c) sb.Append("上昇\n"); else if (a > b && b > c) sb.Append("下降\n"); else sb.Append("混在\n"); } Console.Write(sb); }}
C++main.cpp · 15 行
#include <iostream>int main() { std::ios::sync_with_stdio(false); int n; std::cin >> n; for (int i = 0; i < n; i++) { int a, b, c; std::cin >> a >> b >> c; // a < b < c도 컴파일되지만 (a < b)의 true/false를 c와 비교한다 if (a < b && b < c) std::cout << "上昇\n"; else if (a > b && b > c) std::cout << "下降\n"; else std::cout << "混在\n"; }}
Cmain.c · 15 行
#include <stdio.h>int main(void) { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { int a, b, c; scanf("%d %d %d", &a, &b, &c); /* a < b < c도 컴파일되지만 (a < b)의 1이나 0을 c와 비교한다 */ if (a < b && b < c) puts("上昇"); else if (a > b && b > c) puts("下降"); else puts("混在"); } return 0;}
Craykonmain.cray · 21 行
n = コンソール.行読み().数に();繰り返す (i = 0; i < n; i++){ p = コンソール.行読み().空白除去().分ける(" "); a = p[0].数に(); b = p[1].数に(); c = p[2].数に(); // a < b < c는 (a < b)의 참거짓을 c와 비교한다. 둘로 나눠 &&로 잇는다 もし (a < b && b < c) { コンソール.書く("上昇"); } でなければ もし (a > b && b > c) { コンソール.書く("下降"); } でなければ { コンソール.書く("混在"); }}