{ }codelper
多重条件P0315

放风筝告示板

放风筝小组每天根据风速 w、降雨概率 p 和气温 t,在告示板上写一个词。
第一行给出天数 n,接下来的 n 行每行按顺序给出一天的 w、p、t,各用一个空格分开。
从上往下依次检查下面的规则,只写第一条成立的规则对应的词。
规则 1:p 不低于 70 时是 "下雨"。
规则 2:w 不低于 12 时是 "大风"。
规则 3:w 低于 3 时是 "无风"。
规则 4:t 低于 0 时是 "寒冷"。
规则 5:w 不低于 8 时是 "特技"。
规则 6:以上都不成立时是 "风筝"。
按给出的顺序,每天占一行,输出要写在告示板上的词。

输入
1 ≤ n ≤ 1000,0 ≤ w ≤ 40,0 ≤ p ≤ 100,−30 ≤ t ≤ 45(均为整数)
输出
n 行。
每行是 rain、storm、calm、cold、stunt、kite 之一
样例 1 · stdin
7
3 80 10
15 80 20
15 10 20
2 10 -5
9 10 -5
9 10 5
5 69 0
stdout
下雨
下雨
大风
无风
寒冷
特技
风筝
main.py
输入(stdin)

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

$ 就绪

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

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

从多个分支中只选一个的链,Python 写作 if … elif … else,C、C++、Java、C#、JS、TS 写作 if … else if … else,Craykon 写作 如果 … 否则 如果 … 否则。
只有 Python 有单独的 elif 一词,其余都是在 else 后面接 if。
链从上往下问,只执行第一个成立的分支,其余跳过。
第一个陷阱是提问的顺序。
本题的条件互相重叠,顺序就是规则。
先问风的话,15 80 20 会变成 storm 而不是 rain。
为了把风的条件放在一起而把特技问在寒冷之前,9 10 -5 会变成 stunt 而不是 cold。
第二个陷阱是不写 else,把 if 分开写。
每个成立的条件都会输出,所以 15 80 20 会输出 rain、storm、stunt 三行;最后的 else 只属于紧挨着它的那个 if,所以 3 80 10 在 rain 之后还会输出 kite。
中间只要有一个把 否则 如果 写成 如果,链就在那里断成两段。
把第二个条件这样写,15 80 20 就会输出 rain 和 storm 两行。
如果不输出而是覆盖变量,留下的是最后成立的那个,2 10 -5 会变成 cold 而不是 calm。
第三个陷阱是边界。
“不低于”是 >=,“低于”是 <。
写成 p > 70 会把降雨概率恰好为 70 的日子判错,写成 w <= 3 会把风速恰好为 3 的日子判错,写成 t <= 0 会把气温恰好为 0 的日子判错。
样例中的 5 69 0 是 kite,但用 t <= 0 就成了 cold。
前面的分支已经筛过,后面的条件不必再写成 w >= 3 && w < 12。

Pythonmain.py · 16 行
n = int(input())for _ in range(n):    w, p, t = map(int, input().split())    # 위에서부터 차례로 묻는다. 먼저 맞은 하나만 고른다    if p >= 70:        print("下雨")    elif w >= 12:        print("大风")    elif w < 3:        print("无风")    elif t < 0:        print("寒冷")    elif w >= 8:        print("特技")    else:        print("风筝")
JavaScriptmain.js · 22 行
const [n, ...v] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];for (let i = 0; i < n; i++) {  const w = v[3 * i];  const p = v[3 * i + 1];  const t = v[3 * i + 2];  // 위에서부터 차례로 묻는다. 먼저 맞은 하나만 고른다  if (p >= 70) {    out.push("下雨");  } else if (w >= 12) {    out.push("大风");  } else if (w < 3) {    out.push("无风");  } else if (t < 0) {    out.push("寒冷");  } else if (w >= 8) {    out.push("特技");  } else {    out.push("风筝");  }}console.log(out.join("\n"));
TypeScriptmain.ts · 23 行
import { readFileSync } from "node:fs";const [n, ...v]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: string[] = [];for (let i = 0; i < n; i++) {  const w: number = v[3 * i];  const p: number = v[3 * i + 1];  const t: number = v[3 * i + 2];  // 위에서부터 차례로 묻는다. 먼저 맞은 하나만 고른다  if (p >= 70) {    out.push("下雨");  } else if (w >= 12) {    out.push("大风");  } else if (w < 3) {    out.push("无风");  } else if (t < 0) {    out.push("寒冷");  } else if (w >= 8) {    out.push("特技");  } else {    out.push("风筝");  }}console.log(out.join("\n"));
JavaMain.java · 30 行
import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        StringBuilder out = new StringBuilder();        for (int i = 0; i < n; i++) {            int w = sc.nextInt();            int p = sc.nextInt();            int t = sc.nextInt();            // 위에서부터 차례로 묻는다. 먼저 맞은 하나만 고른다            if (p >= 70) {                out.append("下雨");            } else if (w >= 12) {                out.append("大风");            } else if (w < 3) {                out.append("无风");            } else if (t < 0) {                out.append("寒冷");            } else if (w >= 8) {                out.append("特技");            } else {                out.append("风筝");            }            out.append('\n');        }        System.out.print(out);    }}
C#Main.cs · 45 行
using System;using System.Text; class Program{    static void Main()    {        int n = int.Parse(Console.ReadLine());        var sb = new StringBuilder();        for (int i = 0; i < n; i++)        {            string[] s = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);            int w = int.Parse(s[0]);            int p = int.Parse(s[1]);            int t = int.Parse(s[2]);            // 위에서부터 차례로 묻는다. 먼저 맞은 하나만 고른다            if (p >= 70)            {                sb.Append("下雨");            }            else if (w >= 12)            {                sb.Append("大风");            }            else if (w < 3)            {                sb.Append("无风");            }            else if (t < 0)            {                sb.Append("寒冷");            }            else if (w >= 8)            {                sb.Append("特技");            }            else            {                sb.Append("风筝");            }            sb.Append('\n');        }        Console.Write(sb);    }}
C++main.cpp · 24 行
#include <iostream> int main() {    int n;    std::cin >> n;    for (int i = 0; i < n; i++) {        int w, p, t;        std::cin >> w >> p >> t;        // 위에서부터 차례로 묻는다. 먼저 맞은 하나만 고른다        if (p >= 70) {            std::cout << "下雨" << "\n";        } else if (w >= 12) {            std::cout << "大风" << "\n";        } else if (w < 3) {            std::cout << "无风" << "\n";        } else if (t < 0) {            std::cout << "寒冷" << "\n";        } else if (w >= 8) {            std::cout << "特技" << "\n";        } else {            std::cout << "风筝" << "\n";        }    }}
Cmain.c · 25 行
#include <stdio.h> int main(void) {    int n;    scanf("%d", &n);    for (int i = 0; i < n; i++) {        int w, p, t;        scanf("%d %d %d", &w, &p, &t);        /* 위에서부터 차례로 묻는다. 먼저 맞은 하나만 고른다 */        if (p >= 70) {            puts("下雨");        } else if (w >= 12) {            puts("大风");        } else if (w < 3) {            puts("无风");        } else if (t < 0) {            puts("寒冷");        } else if (w >= 8) {            puts("特技");        } else {            puts("风筝");        }    }    return 0;}
Craykonmain.cray · 33 行
n = 控制台.读行().转数字();循环 (i = 0; i < n; i++){    날 = 控制台.读数字();    w = 날[0];    p = 날[1];    t = 날[2];    // 위에서부터 차례로 묻는다. 먼저 맞은 하나만 고른다    如果 (p >= 70)    {        控制台.输出("下雨");    }    否则 如果 (w >= 12)    {        控制台.输出("大风");    }    否则 如果 (w < 3)    {        控制台.输出("无风");    }    否则 如果 (t < 0)    {        控制台.输出("寒冷");    }    否则 如果 (w >= 8)    {        控制台.输出("特技");    }    否则    {        控制台.输出("风筝");    }}