C++ 寻找最长可被7整除的区间
C++ 寻找最长可被7整除的区间
问题描述: 给定n个整数,分别是a[1], a[2], ..., a[n]。求一个最长的区间[x, y],使得区间中的数(a[x], a[x + 1], a[x + 2], ..., a[y - 1], a[y])的和能被7整除。输出区间长度。若没有符合要求的区间,输出0。
输入描述: 第一行一个整数n (1 <= n <= 50000),接下来是每一个整数。
输出描述: 一个最长的区间内容:[x, y]的长度,使得区间中的数的和能被7整除。若没有符合要求的区间,输出0。
样例输入: 6 1 2 3 4 5 6
样例输出: 4
提示: 输入的数可能是负数。
C++ 代码:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a[50001];
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int sum = 0;
int maxLen = 0;
for (int i = 1; i <= n; i++) {
sum += a[i];
for (int j = i; j <= n; j++) {
if ((sum % 7 == 0) && (j - i + 1 > maxLen)) {
maxLen = j - i + 1;
}
sum += a[j + 1];
}
sum = 0;
}
cout << maxLen << endl;
return 0;
}
代码解释:
- 首先读取输入的n和a[1]到a[n]。
- 使用两个循环,外层循环枚举区间的起点,内层循环枚举区间的终点。
- 对于每一个区间,计算区间内所有数的和,并判断和是否能被7整除。
- 如果和能被7整除,且当前区间的长度大于之前找到的最长区间长度,则更新最长区间长度。
- 最后输出最长区间的长度。
注意: 代码中的数组a的下标从1开始,而不是从0开始。这是为了方便与输入描述中的下标对应。
代码优化: 为了提高效率,可以对代码进行优化。例如,可以利用前缀和来加速计算区间的和。
总结: 本文提供了一种使用C++代码解决寻找最长可被7整除的区间的方案。代码清晰易懂,并且提供了样例输入和输出。同时,也指出了代码可以进行优化的地方。希望本文能够帮助读者理解并解决类似问题。
原文地址: https://www.cveoy.top/t/topic/oxOp 著作权归作者所有。请勿转载和采集!