要把一张照片放进边长为 S 的正方形相框。 照片在保持宽高比例的前提下改变大小,使长边的长度正好是 S。 照片比相框小就放大,比相框大就缩小。 一行给出 S、照片的宽 w 和高 h,用一个空格隔开。 如果 w 大于或等于 h,新的宽是 S,新的高是 h × S 除以 w 的商。 否则新的高是 S,新的宽是 w × S 除以 h 的商。 商是除法舍去小数部分后的整数(不四舍五入)。 按新的宽、新的高的顺序在一行输出,用一个空格隔开。
输入
1 ≤ S, w, h ≤ 10,000(整数)。 长边不超过短边的 S 倍(所以新的短边至少是 1)
输出
一行:新的宽和新的高(两个整数)
样例 1 · stdin
1080 4000 3000
stdout
1080 810
样例 2 · stdin
500 600 900
stdout
333 500
main.py
错误列表00F8 ↓ · ⇧F8 ↑
输入(stdin)
运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。
$ 就绪
请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。
其他语言怎么写?查看各语言题解 · 8 种语言题解
这是在两条分支里只选一条的 if-else 题。 写法:Python if w >= h: … else:(冒号和缩进就是语法),C、C++、Java、C#、JS、TS if (w >= h) { … } else { … },Craykon 如果 (w >= h) { … } 否则 { … }。 如果漏掉条件,以为宽总是长边,竖拍的照片(600 × 900)会变成 500 × 750,超出相框。 分支里的计算也有陷阱。 第一,先乘后除:C、C++、Java、C# 的 int / 只留商,写成 h / w * S 时 3000 / 4000 先变成 0,答案就是 0。 第二,只留商的方法不同。 C 系语言 int 之间用 / 即可,Python 要用 //(/ 会输出 810.0),JS/TS 用 Math.floor(h * S / w),Craykon 用 数学.商(h * S, w)。 像 Math.round 那样四舍五入,200 / 3 = 66.67 会变成 67,是错的。 乘积不超过 1 亿,32 位 int 足够。 正方形照片(w = h)走哪条分支都是 S S。
Pythonmain.py · 6 行
S, w, h = map(int, input().split())# 곱하기를 먼저 하고 //로 몫만 남긴다if w >= h: print(S, h * S // w)else: print(w * S // h, S)
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int S = sc.nextInt(); int w = sc.nextInt(); int h = sc.nextInt(); if (w >= h) { System.out.println(S + " " + h * S / w); } else { System.out.println(w * S / h + " " + S); } }}
C#Main.cs · 20 行
using System;class Program{ static void Main() { string[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); int S = int.Parse(p[0]); int w = int.Parse(p[1]); int h = int.Parse(p[2]); if (w >= h) { Console.WriteLine($"{S} {h * S / w}"); } else { Console.WriteLine($"{w * S / h} {S}"); } }}
C++main.cpp · 11 行
#include <iostream>int main() { int S, w, h; std::cin >> S >> w >> h; if (w >= h) { std::cout << S << " " << h * S / w << "\n"; } else { std::cout << w * S / h << " " << S << "\n"; }}
Cmain.c · 13 行
#include <stdio.h>int main(void) { int S, w, h; scanf("%d %d %d", &S, &w, &h); /* 곱해도 1억까지라 int로 충분하다 */ if (w >= h) { printf("%d %d\n", S, h * S / w); } else { printf("%d %d\n", w * S / h, S); } return 0;}