#include<stdio.h>
int main() {
	int n;
	int m;
	scanf("%d %d",&n,&m);
	int arr[100000] = { 0 };
	for (int i = 0; i < n;i++) {
		scanf("%d",&arr[i]);
	}
	int min = 0;
	for (int i = 0; i < m; i++) {
		min += arr[i];
	}
	for (int i = 0; i <= n - m;i++) {
		int sum = 0;
		for (int j = i; j < m+i; j++) {
			sum += arr[j];
		}
		if (sum < min) min = sum;
	}
	printf("%d\n",min);
}

将刺痛值存入数组,用min来记录连续m个刺痛值的和的最小值。

通过for循环来比较求最小值。外层用来遍历整个数组,直到遍历到第n-m个停下来,第n-m个是最后的连续m个刺痛值的起始位置。内层用来计算连续m个刺痛值的总和,将它们与min比较。用if语句来判断,直至最后求出最小值。

作者看到别人定义数组时,有的用了int arr[n];,有的用了动态内存分配。可惜前者作者的编译器(vs2022)会报错,后者作者还没学不会写,所以只好改写为    int arr[100000] = { 0 };。。。

作者在编写这段代码时,犯了很多小错。比如:

在写scanf("%d",&arr[i]);这行代码时,作者忘记写取地址符号了。

在写内循环时,中间写的是j <=m+i,后来把除了这句之外的其它代码改了好多遍,不管怎么改输出都是9,最后快改崩溃了。。。

后来作者在设置min的值时,发现一种更加简单的方法。把min的值赋得很大,确保循环中sum的值比它小然后换掉min就行了。

更多推荐