每日一题洛谷P1614 爱与愁的心痛c语言
·

#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就行了。

更多推荐


所有评论(0)