洛谷P1614 爱与愁的心痛()

爱与愁的心痛

题目背景

(本道题目隐藏了两首歌名,找找看哪~~~)

《爱与愁的故事第一弹·heartache》第一章。

《我为歌狂》当中伍思凯神曲《舞月光》居然没赢给萨顶顶,爱与愁大神心痛啊~~~而且最近还有一些令人伤心的事情,都让人心痛(最近真的很烦哈)……

题目描述

最近有 n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。

输入格式

第一行有两个用空格隔开的整数,分别代表 n 和 m。

第 2 到第 (n + 1) 行,每行一个整数,第 (i + 1)行的整数 a_i 代表第 i 件事的刺痛值 a_i。

输出格式

输出一行一个整数,表示连续 m 个刺痛值的和的最小值是多少。

样例 #1

样例输入 #1

8 3
1
4
7
3
1
2
4
3

样例输出 #1

6

提交程序


import java.util.Arrays;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0;i < n;i++) {
            a[i] = sc.nextInt();
        }

        //累加当前所有刺痛值作为最小值
        int min = 0;
        for (int i = 0;i < n;i++) {
            min += a[i];
        }

        //当n为8时,m为3时,每一次累加3位数的和需要8-3+1次,即n-m+1次
        for (int i = 0;i < n - m + 1;i++) {
            int sum = 0;
            //根据m为3时,每次累加三位数,一个循环进一位i
            for (int j = i;j < i + m;j++) {
                sum += a[j];
            }
            if (sum < min) {
                min = sum;
            }
        }
        System.out.println(min);
    }
}

————————

爱与愁的心痛

题目背景

(本道题目隐藏了两首歌名,找找看哪~~~)

《爱与愁的故事第一弹·heartache》第一章。

《我为歌狂》当中伍思凯神曲《舞月光》居然没赢给萨顶顶,爱与愁大神心痛啊~~~而且最近还有一些令人伤心的事情,都让人心痛(最近真的很烦哈)……

题目描述

最近有 n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。

输入格式

第一行有两个用空格隔开的整数,分别代表 n 和 m。

第 2 到第 (n + 1) 行,每行一个整数,第 (i + 1)行的整数 a_i 代表第 i 件事的刺痛值 a_i。

输出格式

输出一行一个整数,表示连续 m 个刺痛值的和的最小值是多少。

样例 #1

样例输入 #1

8 3
1
4
7
3
1
2
4
3

样例输出 #1

6

提交程序


import java.util.Arrays;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0;i < n;i++) {
            a[i] = sc.nextInt();
        }

        //累加当前所有刺痛值作为最小值
        int min = 0;
        for (int i = 0;i < n;i++) {
            min += a[i];
        }

        //当n为8时,m为3时,每一次累加3位数的和需要8-3+1次,即n-m+1次
        for (int i = 0;i < n - m + 1;i++) {
            int sum = 0;
            //根据m为3时,每次累加三位数,一个循环进一位i
            for (int j = i;j < i + m;j++) {
                sum += a[j];
            }
            if (sum < min) {
                min = sum;
            }
        }
        System.out.println(min);
    }
}