{ }codelper
比较P0227

三天气温的走势

根据三天的白天最高气温,记下气温的走势。
第一行给出记录数 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
输入(stdin)

运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。

$ 就绪

请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。

其他语言怎么写?查看各语言题解 · 8 种语言题解

能不能像数学那样写 a < b < c,因语言而异。
只有 Python 会把它读成 a < b and b < c。
在 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)    {        控制台.输出("下降");    }    否则    {        控制台.输出("混合");    }}