要在一条长 L 米的散步道上立路灯。 在路的起点(0 米处)立第一盏路灯,从那里起每隔 s 米立一盏。 路的尽头(L 米处)即使不合间隔,也一定要立一盏路灯。 同一个地点不会立两盏路灯。 一行给出 L 和 s,用一个空格隔开。 请按从近到远的顺序,每行一个,输出每盏路灯离起点多少米。 例如 L = 10、s = 3 时是 0、3、6、9、10,L = 10、s = 5 时是 0、5、10。
输入
1 ≤ L ≤ 1,000,1 ≤ s ≤ 1,000(均为整数)。 s 可能比 L 大
输出
每盏路灯的位置占一行,从小到大。 不写单位,只写数字
样例 1 · stdin
10 3
stdout
0
3
6
9
10
样例 2 · stdin
10 5
stdout
0
5
10
main.py
错误列表00F8 ↓ · ⇧F8 ↑
输入(stdin)
运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。
$ 就绪
请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。
其他语言怎么写?查看各语言题解 · 8 种语言题解
按固定步长跳着走的循环,各语言写法不同。 Python 写 for x in range(0, L, s),不包含终点(L)。 C、C++、Java、C#、JS、TS 写 for (x = 0; x < L; x += s),Craykon 写 循环 (x = 0; x < L; x += s)。 这样只走到 L 之前,再输出一次 L,终点就既不会重复也不会漏掉。 陷阱一:循环到 x <= L,然后又输出一次 L,当 L 是 s 的倍数时终点会出现两次(例 2 变成 0 5 10 10)。 陷阱二:像 range(0, L + 1, s) 那样只是走到终点,却不另外输出 L,当 L 不是 s 的倍数时就漏掉了尽头的路灯(例 1 变成 0 3 6 9)。 陷阱三:不按位置而按次数来数,在 i < L / s 期间输出 i * s,这种写法在不同语言里结果不同。 C、C++、Java、C# 中整数之间的 / 只留下商,10 / 3 是 3,只在 i 为 0、1、2 时循环,于是漏掉 9(例 1 变成 0 3 6 10)。 JS、TS、Craykon 的 / 会除到 3.333…,i 为 3 时也循环,结果正确。 Python 的 range(L / s) 不接受小数,会因 TypeError 停止,改成 range(L // s) 后和 C 一样漏掉 9。
Pythonmain.py · 5 行
L, s = map(int, input().split())# range(0, L, s)는 0부터 s씩 건너뛰며, 끝(L)은 넣지 않는다for x in range(0, L, s): print(x)print(L) # 길 끝의 가로등은 따로 한 번
JavaScriptmain.js · 8 行
const [L, s] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];// x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다for (let x = 0; x < L; x += s) { out.push(x);}out.push(L); // 길 끝의 가로등은 따로 한 번console.log(out.join("\n"));
TypeScriptmain.ts · 9 行
import { readFileSync } from "node:fs";const [L, s]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: number[] = [];// x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다for (let x = 0; x < L; x += s) { out.push(x);}out.push(L); // 길 끝의 가로등은 따로 한 번console.log(out.join("\n"));
JavaMain.java · 13 行
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int L = sc.nextInt(), s = sc.nextInt(); // x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다 for (int x = 0; x < L; x += s) { System.out.println(x); } System.out.println(L); // 길 끝의 가로등은 따로 한 번 }}
C#Main.cs · 16 行
using System;class Program{ static void Main() { string[] parts = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); int L = int.Parse(parts[0]), s = int.Parse(parts[1]); // x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다 for (int x = 0; x < L; x += s) { Console.WriteLine(x); } Console.WriteLine(L); // 길 끝의 가로등은 따로 한 번 }}
C++main.cpp · 11 行
#include <iostream>int main() { int L, s; std::cin >> L >> s; // x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다 for (int x = 0; x < L; x += s) { std::cout << x << "\n"; } std::cout << L << "\n"; // 길 끝의 가로등은 따로 한 번}
Cmain.c · 12 行
#include <stdio.h>int main(void) { int L, s; if (scanf("%d %d", &L, &s) != 2) return 0; /* x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다 */ for (int x = 0; x < L; x += s) { printf("%d\n", x); } printf("%d\n", L); /* 길 끝의 가로등은 따로 한 번 */ return 0;}
Craykonmain.cray · 9 行
nums = 控制台.读数字();L = nums[0];s = nums[1];// x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다循环 (x = 0; x < L; x += s){ 控制台.输出(x);}控制台.输出(L); // 길 끝의 가로등은 따로 한 번