判断函数直接返回条件表达式就行,不必展开写成 if (条件) return true; else return false;。 返回类型:Python bool,JS、TS boolean,Java boolean,C# bool,C++ bool,C 用 <stdbool.h> 的 bool,Craykon 在 返回 后面写条件表达式。 同一个函数在横向和纵向各调用一次,用 &&(Python 是 and)连接。 四个陷阱:① 只有 Python 能直接写数学里的 a ≤ v ≤ b(low <= v <= high)。 JS 会不报错地接受 low <= v <= high,但把它读成 (low <= v) <= high,拿前一个比较的结果(0 或 1)去和 high 比。 所以 high 大于等于 1 时总是真。 C、C++ 也按同样的意思去读:gcc 会照常编译(加上 -Wall 才有警告),较新的 clang 则报错拦住。 Java 和 C# 因为布尔值不能和数比较而不予编译,TS 也用 TS2365 错误拦住,Craykon 也会提示不能连着写比较并拦住。 在这些语言里要拆成两个:low <= v && v <= high。 ② 顶点可能以颠倒的顺序给出,所以先用 min(a, b) 和 max(a, b) 定出小的一端和大的一端(Craykon 数学.较小值、数学.较大值)。 样例中 x1 = 8 比 x2 = 2 大。 ③ 边线上也算里面,所以是 <= 而不是 <。 ④ 横向和纵向都要符合,所以是 && 而不是 ||。
Pythonmain.py · 13 行
def between(v, a, b): """v가 a와 b 사이(양 끝 포함)에 있으면 True. a와 b는 어느 쪽이 커도 된다.""" return min(a, b) <= v <= max(a, b)x1, y1, x2, y2 = map(int, input().split())n = int(input())for _ in range(n): x, y = map(int, input().split()) if between(x, x1, x2) and between(y, y1, y2): print("是") else: print("否")
JavaScriptmain.js · 14 行
// v가 a와 b 사이(양 끝 포함)에 있으면 true. a와 b는 어느 쪽이 커도 된다function between(v, a, b) { return Math.min(a, b) <= v && v <= Math.max(a, b);}const lines = require("fs").readFileSync(0, "utf8").split("\n");const [x1, y1, x2, y2] = lines[0].trim().split(/\s+/).map(Number);const n = Number(lines[1]);const out = [];for (let i = 0; i < n; i++) { const [x, y] = lines[2 + i].trim().split(/\s+/).map(Number); out.push(between(x, x1, x2) && between(y, y1, y2) ? "是" : "否");}console.log(out.join("\n"));
TypeScriptmain.ts · 16 行
import { readFileSync } from "node:fs";// v가 a와 b 사이(양 끝 포함)에 있으면 true. a와 b는 어느 쪽이 커도 된다function between(v: number, a: number, b: number): boolean { return Math.min(a, b) <= v && v <= Math.max(a, b);}const lines: string[] = readFileSync(0, "utf8").split("\n");const [x1, y1, x2, y2]: number[] = lines[0].trim().split(/\s+/).map(Number);const n: number = Number(lines[1]);const out: string[] = [];for (let i = 0; i < n; i++) { const [x, y]: number[] = lines[2 + i].trim().split(/\s+/).map(Number); out.push(between(x, x1, x2) && between(y, y1, y2) ? "是" : "否");}console.log(out.join("\n"));
JavaMain.java · 20 行
import java.util.Scanner;public class Main { // v가 a와 b 사이(양 끝 포함)에 있으면 true. a와 b는 어느 쪽이 커도 된다 static boolean between(int v, int a, int b) { return Math.min(a, b) <= v && v <= Math.max(a, b); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x1 = sc.nextInt(), y1 = sc.nextInt(), x2 = sc.nextInt(), y2 = sc.nextInt(); int n = sc.nextInt(); StringBuilder out = new StringBuilder(); for (int i = 0; i < n; i++) { int x = sc.nextInt(), y = sc.nextInt(); out.append(between(x, x1, x2) && between(y, y1, y2) ? "是" : "否").append('\n'); } System.out.print(out); }}
C#Main.cs · 27 行
using System;class Program{ // v가 a와 b 사이(양 끝 포함)에 있으면 true. a와 b는 어느 쪽이 커도 된다 static bool Between(int v, int a, int b) { return Math.Min(a, b) <= v && v <= Math.Max(a, b); } static int[] ReadInts() { return Array.ConvertAll(Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries), int.Parse); } static void Main() { int[] r = ReadInts(); int n = ReadInts()[0]; for (int i = 0; i < n; i++) { int[] ball = ReadInts(); bool inside = Between(ball[0], r[0], r[2]) && Between(ball[1], r[1], r[3]); Console.WriteLine(inside ? "是" : "否"); } }}
C++main.cpp · 17 行
#include <algorithm>#include <iostream>// v가 a와 b 사이(양 끝 포함)에 있으면 true. a와 b는 어느 쪽이 커도 된다bool between(int v, int a, int b) { return std::min(a, b) <= v && v <= std::max(a, b);}int main() { int x1, y1, x2, y2, n; std::cin >> x1 >> y1 >> x2 >> y2 >> n; for (int i = 0; i < n; i++) { int x, y; std::cin >> x >> y; std::cout << (between(x, x1, x2) && between(y, y1, y2) ? "是" : "否") << '\n'; }}
Cmain.c · 20 行
#include <stdbool.h>#include <stdio.h>// v가 a와 b 사이(양 끝 포함)에 있으면 true. a와 b는 어느 쪽이 커도 된다bool between(int v, int a, int b) { int low = a < b ? a : b; int high = a < b ? b : a; return low <= v && v <= high;}int main(void) { int x1, y1, x2, y2, n; if (scanf("%d %d %d %d %d", &x1, &y1, &x2, &y2, &n) != 5) return 0; for (int i = 0; i < n; i++) { int x, y; if (scanf("%d %d", &x, &y) != 2) return 0; puts(between(x, x1, x2) && between(y, y1, y2) ? "是" : "否"); } return 0;}
Craykonmain.cray · 20 行
// v가 a와 b 사이(양 끝 포함)에 있으면 참. a와 b는 어느 쪽이 커도 된다사이인가(v, a, b){ 返回 数学.较小值(a, b) <= v && v <= 数学.较大值(a, b);}r = 控制台.读数字();n = 控制台.读行().转数字();循环 (i = 0; i < n; i++){ ball = 控制台.读数字(); 如果 (사이인가(ball[0], r[0], r[2]) && 사이인가(ball[1], r[1], r[3])) { 控制台.输出("是"); } 否则 { 控制台.输出("否"); }}