在C++中检查数字是否为序列的句点

2022-08-23 00:00:00 algorithm loops 函数定义 c++ stdvector

我需要检查数字是否为序列的句号。

示例:{1,3,1,4,2,1,3,1,4,2,1,3}

期间为5和10。基准期间为5,因为它是最小的期间。

#include <iostream>
#include <vector>
int p=0;
int period(std::vector<double>v , int x)
{
    int p = 0;
    for (int i = 1; !p && i < v.size(); i++)
    {
        int j = 0;
        while (j < v.size() - i && v[j] == v[j + i]) ++j;
        if ( j + i == v.size() ) p = i;
    }
    if(p!=x)
    return false;
    return true;
}

int main()
{
    std::vector<double> v = { 1, 3, 1, 4, 2, 1, 3, 1, 4, 2, 1, 3 };
    std::cout << period( v,10 ) << '
';
}

我的代码检查数字是否等于基本周期。如何检查它是否等于任何句点并在这种情况下返回True?


解决方案

该函数可以通过以下方式定义

bool period( const std::vector<double> &v , size_t n )
{
    bool is_period = false;

    if ( n < v.size() )
    {
        size_t j = 0;
        while ( j < v.size() - n && v[j] == v[j + n]) ++j;
        is_period = j + n == v.size();
    }

    return is_period;
}

这是一个演示程序。

#include <iostream>
#include <vector>

bool period( const std::vector<double> &v, size_t n )
{
    bool is_period = false;

    if (n < v.size())
    {
        size_t j = 0;
        while (j < v.size() - n && v[j] == v[j + n]) ++j;
        is_period = j + n == v.size();
    }

    return is_period;
}

int main()
{
    std::vector<double> v = { 1, 3, 1, 4, 2, 1, 3, 1, 4, 2, 1, 3 };

    if (period( v, 5 )) std::cout << 5 << " is a period
";
    if (period( v, 10 )) std::cout << 10 << " is a period
";
}

程序输出为

5 is a period
10 is a period

相关文章