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

力扣支持团队发表于:2021年05月06日 下午 3:40:23更新于:2024年01月04日 下午 4:35:09

当您看到提交代码的区域是一块空白的时候,说明当前这道题目需要您自行编写「标准输入」和「标准输出」逻辑,以及自行 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);
   }
}

Python

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])
from functools import reduce
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 readline = require('readline');

const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});

// 读取n和m
rl.question('', (nums) => {
   const [n, m] = nums.split(' ').map(Number);
   const pref = Array.from({length:n+1},()=>0)
   const mx = Array.from({length:n+1},()=>0)
   // 读取数组
   rl.question('', (numbers) => {
       const a = numbers.split(' ').map(Number);
   a.unshift(0)
   for(let i=1;i<=n;i++){
       pref[i]=pref[i-1]+a[i]
       mx[i]=Math.max(mx[i],mx[i-1])
   }
   let ans = (1<<30)
   for (let i = m; i <= n; i++) {
       ans = Math.min(ans, pref[i] - mx[i - m]);
   }
   console.log(ans)
   
   // 关闭标准输入
   rl.close()
 });
});

// 当标准输入关闭时触发
rl.on('close', () => {
 process.exit(0);
});