太阳黑子是太阳表面因温度相对较低而显得'黑'的局部区域,一般成群出现在太阳表面,并且对地球造成很明显的影响。为此,人类根据多项科学研究追溯到几十万年前的黑子活动,并重建了数据记录。小蓝拿到了一组数据,有N个整数,表示连续N年里每一年的太阳黑子最大数量,他希望找出所有数量连续增加的记录,并计算出连续增加记录中的最长连续年数。

例如:N=8,连续8年里太阳黑子最大数量依次是2、3、1、2、4、8、4、9,数量连续增加的记录有 (2、3)、(1、2、4、8)、(4、9),连续增加的年数分别是2、4、2,其中最长连续年数为4,故最后输出4。

c++写内容:以下是一个用C++实现的解决方案:

#include <iostream>
#include <vector>

int findLongestIncreasingSequence(const std::vector<int>& nums) {
    int maxLen = 0; // 最长连续年数
    int currLen = 0; // 当前连续年数

    for (int i = 1; i < nums.size(); i++) {
        if (nums[i] > nums[i - 1]) { // 数量增加
            currLen++;
        } else {
            if (currLen > maxLen) {
                maxLen = currLen;
            }
            currLen = 0; // 重新计数
        }
    }

    if (currLen > maxLen) {
        maxLen = currLen;
    }

    return maxLen + 1; // 加1是因为我们计算的是连续年数,所以要加上第一个年份
}

int main() {
    int N;
    std::cout << "请输入年数N:";
    std::cin >> N;

    std::vector<int> nums(N);
    std::cout << "请依次输入每年的太阳黑子最大数量:" << std::endl;
    for (int i = 0; i < N; i++) {
        std::cin >> nums[i];
    }

    int longestIncreasingSequence = findLongestIncreasingSequence(nums);
    std::cout << "最长连续年数为:" << longestIncreasingSequence << std::endl;

    return 0;
}

你可以将以上代码保存到一个名为'sunspots.cpp'的文件中,并使用C++编译器进行编译和运行。输入年数N和每年的太阳黑子最大数量后,程序将输出最长连续年数。

太阳黑子活动分析:找出最长连续增加年数

原文地址: https://www.cveoy.top/t/topic/qiOR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录