原题链接:蓝桥杯算法提高-数组求和
解题思路:让数组循环,每次只需要记录从数组第一个元素起,到第m个元素的和,再比较大小。
#include<stdio.h>
#include<stdlib.h>
void cycle(int*, int);
int main()
{
int n, m;
scanf("%d%d", &n, &m);
int* arr = (int*)malloc(n * sizeof(int));
if (!arr)
{
perror("malloc error:");
exit(-1);
}
int i = 0, max = 0,j = 0;
for (j = 0; j < n; j++)
{
scanf("%d", arr + j);//输入
}
for (i; i < n; i++)
{
int temp = 0;
for (j = 0; j < m; j++)
{
temp += arr[j];//从第一个元素开始 m个元素的和
}
if (temp > max)
{
max = temp;
}
cycle(arr, n);//让数组循环
}
printf("%d", max);
return 0;
}
函数实现很基础 每次数组整体右移 最后一个元素放在第一个元素上
void cycle(int* arr, int len)
{
int i = 0, k = arr[len - 1];//将最后一个元素记住
for (i = len - 1; i > 0; i--)
{
arr[i] = arr[i - 1];
}
arr[0] = k;//放在开头
}
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复