{ }codelper
逆順ループ飛ばしながらループつなげて出力P0024

飛ばしながら逆に数える

整数 n と s が与えられる。
n から始めて s ずつ減らしていき、1 以上の数だけを一行に出力せよ。
数と数の間には空白を一つずつ置き、行の先頭には空白を置かない。
例えば n = 10, s = 3 なら 10 7 4 1、n = 10, s = 5 なら 10 5(0 は出力しない)。

入力
1 ≤ s ≤ n ≤ 10,000
出力
一行
例 1 · stdin
10 3
stdout
10 7 4 1
例 2 · stdin
10 5
stdout
10 5
main.py
入力(stdin)

実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。

$ 準備完了

コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。

ほかの言語では?言語別の解答を見る · 8 言語の解答

どこで止まるかが落とし穴です。
Python の range(n, 0, -s) は終わり(0)を含まないので 1 まで行き、range(n, 1, -s) と書くと 1 に届いても 1 が抜けます。
C 系の for (i = n; i >= 1; i -= s) で i >= 0 と書くと、n が s の倍数のとき 0 まで出します。
回数を数えて回すなら n / s ではなく (n - 1) / s + 1 個です(10 3 は 4 個)。
空白は間だけに置きます:数ごとに前へ " " を付けると行が空白で始まって誤りです(この採点機が許すのは行末の空白だけ)。
間に入れてつなぐ道具が言語ごとにあります:Python " ".join(...) または print(*range(n, 0, -s))、JS・TS 配列.join(" ")、Java StringJoiner・String.join、C# string.Join(" ", …)。
C と C++(C++23 より前)には手頃な道具がないので「最初の数でなければ空白」を自分で書きます。
Craykon は C と同じく コンソール.続けて書く(…) で改行せずに書き、最後に コンソール.書く("") で改行します(リストに集めて リスト.つなぐ(" ") でも書けます)、逆向きの歩みは 繰り返す (i = n; i >= 1; i -= s)。

Pythonmain.py · 3 行
n, s = map(int, input().split())# range(시작, 끝, 걸음): 끝(0)은 들어가지 않는다 → 1까지print(" ".join(str(i) for i in range(n, 0, -s)))
JavaScriptmain.js · 4 行
const [n, s] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];for (let i = n; i >= 1; i -= s) out.push(i);console.log(out.join(" "));
TypeScriptmain.ts · 5 行
import { readFileSync } from "node:fs";const [n, s]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: number[] = [];for (let i = n; i >= 1; i -= s) out.push(i);console.log(out.join(" "));
JavaMain.java · 12 行
import java.util.Scanner;import java.util.StringJoiner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt(), s = sc.nextInt();        StringJoiner out = new StringJoiner(" ");        for (int i = n; i >= 1; i -= s) out.add(String.valueOf(i));        System.out.println(out);    }}
C#Main.cs · 14 行
using System;using System.Collections.Generic; class Program{    static void Main()    {        int[] v = Array.ConvertAll(Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries), int.Parse);        int n = v[0], s = v[1];        var out_ = new List<int>();        for (int i = n; i >= 1; i -= s) out_.Add(i);        Console.WriteLine(string.Join(" ", out_));    }}
C++main.cpp · 12 行
#include <iostream> int main() {    std::ios::sync_with_stdio(false);    int n, s;    std::cin >> n >> s;    for (int i = n; i >= 1; i -= s) {        if (i != n) std::cout << ' ';        std::cout << i;    }    std::cout << "\n";}
Cmain.c · 12 行
#include <stdio.h> int main(void) {    int n, s;    scanf("%d %d", &n, &s);    for (int i = n; i >= 1; i -= s) {        if (i != n) putchar(' ');   /* 사이에만 빈칸: 첫 수 앞에는 없음 */        printf("%d", i);    }    putchar('\n');    return 0;}
Craykonmain.cray · 12 行
v = コンソール.数読み();n = v[0];s = v[1];繰り返す (i = n; i >= 1; i -= s){    もし (i != n)    {        コンソール.続けて書く(" ");    }    コンソール.続けて書く(i);}コンソール.書く("");