我应该如何完成需要自定义输入输出的题目?

力扣支持团队发表于:2021年05月06日 下午 3:40:23更新于:2025年09月18日 早上 10:49:10

当您看到提交代码的区域是一块空白的时候,说明当前这道题目需要您自行编写「标准输入」和「标准输出」逻辑,以及自行 import/include 需要的 library

首先,您需要认真阅读题目中给出的「格式」要求以及「示例」,了解清楚「输入」「输出」的格式,然后按照输入格式从「标准输入」读取数据,再编写相应的代码计算结果,最后按照输出格式将结果输出到「标准输出」。

以下是题目《简单游戏》的样例代码:

给出一个长度为 n 的数组 a,你需要在这个数组中找到一个长度至少为 m 的区间,使得这个区间内的数字的和尽可能小。

格式:

输入:
- 第一行包含一个正整数 n,m,表示数组的大小和所选区间的最小长度。
- 第二行包含 n 个整数,中间用空格隔开。
输出:
- 输出仅包含一个正整数,表示所选区间的和。

示例:

输入:
     5 3 
     1 2 3 4 5
输出:6

Java

注意:类名必须是 Solution不能带有包(package)的信息,可以有 import

可以使用 Scanner 读取输入。当数据量多的时候,可以使用 BufferedReader

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取 n m
        int n = scanner.nextInt(), m = scanner.nextInt();

        int[] nums = new int[n + 1];
        int[] pref = new int[n + 1];
        int[] mx = new int[n + 1];
        
        // 读入数组
        for (int i = 1; i <= n; i++) {
            nums[i] = scanner.nextInt();
            pref[i] = pref[i - 1] + nums[i];
            mx[i] = Math.max(pref[i], mx[i - 1]);
        }
        int ans = Integer.MAX_VALUE;
        for (int i = m; i <= n; i++) {
            ans = Math.min(ans, pref[i] - mx[i - m]);
        }
        
        // 将结果输出到标准输出
        System.out.println(ans);
    }
}

Python3

from functools import reduce

n, m = map(int, input().split())
a = [0] + list(map(int, input().split()))

pref = [0] * (n + 1)
mx = [0] * (n + 1)

for i in range(1, n + 1):
    pref[i] = pref[i - 1] + a[i]
    mx[i] = max(pref[i], mx[i - 1])

print(reduce(min, [pref[i] - mx[i - m] for i in range(m, n + 1)], 1 << 30))

C++

注意:若使用 cin,cout 进行输入输出,在数据量较大时,可以使用 ios::sync_with_stdio(false);cin.tie(0); 语句对输入输出速度进行优化,但请注意,在使用上述优化的情况下,请勿混用 cin 与 scanf、cout 与 printf,否则代码可能发生无法预料的行为。

#include <iostream>
#include <vector>
#include <cassert>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n, m;
    cin >> n >> m;

    vector<int> a(n + 1);
    vector<int> pref(n + 1);
    vector<int> mx(n + 1);

    int ans = (1 << 30);

    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        pref[i] = pref[i - 1] + a[i];
        mx[i] = max(mx[i - 1], pref[i]);
    }

    for (int i = m; i <= n; ++i) {
        ans = min(ans, pref[i] - mx[i - m]);
    }

    cout << ans << endl;
    return 0;
}

GO 

package main
import (
    "fmt"
)

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func main() {
    var n, m int
    fmt.Scanln(&n, &m)

    a := make([]int, n+1)
    pref := make([]int, n+1)
    mx := make([]int, n+1)
    ans := 1 << 30

    for i := 1; i <= n; i++ {
        fmt.Scan(&a[i])
        pref[i] = pref[i-1] + a[i]
        mx[i] = max(mx[i-1], mx[i])
    }

    for i := m; i <= n; i++ {
        ans = min(ans, pref[i]-mx[i-m])
    }

    fmt.Println(ans)
}

JavaScript

const fs = require('fs');

const input = fs.readFileSync(0, 'utf8').split(/\s+/).map(Number);

let idx = 0;
const n = input[idx++];
const m = input[idx++];

const a = [0];
for (let i = 0; i < n; i++) {
    a.push(input[idx++]);
}

const pref = Array.from({ length: n + 1 }, () => 0);
const mx = Array.from({ length: n + 1 }, () => 0);

for (let i = 1; i <= n; i++) {
    pref[i] = pref[i - 1] + a[i];
    mx[i] = Math.max(mx[i - 1], pref[i]);
}

let ans = 1 << 30;
for (let i = m; i <= n; i++) {
    ans = Math.min(ans, pref[i] - mx[i - m]);
}

console.log(ans);