检查数字是否是 C++ 中的序列周期
Check if number is period of sequence in C++
我需要检查数字是否是一个序列号。
示例:{ 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 ) << '\n';
}
我的代码检查数字是否等于基期。我如何检查它是否等于任何周期,在那种情况下 return 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\n";
if (period( v, 10 )) std::cout << 10 << " is a period\n";
}
程序输出为
5 is a period
10 is a period
您可以尝试以模 (%) 周期的轮换检查您的答案,例如最小周期,在本例中为 5。
我需要检查数字是否是一个序列号。
示例:{ 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 ) << '\n';
}
我的代码检查数字是否等于基期。我如何检查它是否等于任何周期,在那种情况下 return 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\n";
if (period( v, 10 )) std::cout << 10 << " is a period\n";
}
程序输出为
5 is a period
10 is a period
您可以尝试以模 (%) 周期的轮换检查您的答案,例如最小周期,在本例中为 5。