對于一個數字序列 a 1 , a 2 ,...,a n,我們說存在一個句點,如果
1≤p<n并且如果它對于所有對這個等式有意義的值都成立 ai=a i p 。例如,數字序列 1, 3, 1, 4, 2, 1, 3, 1, 4, 2, 1, 3 的周期為 5,因為對于所有值,ai=ai 5使得索引i和i 5在允許的范圍內(即 1 到 7 包括在內)。同樣的序列也有一個周期為 10。接下來,我們說這個數字序列是周期性的,如果它至少存在一個數字是該序列的周期,最小的這個數字稱為基本序列周期。如果不存在這樣的數字,則序列不是周期性的。例如,上面的數字序列是以基周期5為周期的,而數字序列4、5、1、7、1、5不是周期的。
#include <iostream>
#include <vector>
int period(std::vector<double> vektor) {
int p;
for (int i : vektor) {
for (int j : vektor) {
if (vektor[i] == vektor[j])
p = j;
}
}
return p;
}
int main() {
std::vector<double> vektor{1, 3, 1, 4, 2, 1, 3, 1, 4, 2, 1, 3};
std::cout << period(vektor);
return 0;
}
- 這應該使用向量來解決。
你能幫我修復這段代碼嗎?這將回傳 3 作為序列的基本周期。
uj5u.com熱心網友回復:
對于初學者來說,當所有初始值設定項都具有type 時,為什么要使用具有 value 型別double而不是type 的向量的原因尚不清楚。intint
該函式period應通過常量參考接受向量。
變數p未初始化。因此,該函式可以回傳一個不確定的值。
如您所想,基于范圍的 for 回圈不會回傳容器中的索引
for (int i : vektor) {
它回傳存盤在 double 型別的向量物件中。
所以if陳述句中的條件
if (vektor[i] == vektor[j])
沒有意義。
該函式如下面的演示程式所示。
#include <iostream>
#include <vector>
size_t period( const std::vector<double> &v )
{
size_t p = 0;
for (size_t i = 1; !p && i < v.size(); i )
{
size_t j = 0;
while (j < v.size() - i && v[j] == v[j i]) j;
if ( j i == v.size() ) p = i;
}
return p;
}
int main()
{
std::vector<double> v = { 1, 3, 1, 4, 2, 1, 3, 1, 4, 2, 1, 3 };
std::cout << period( v ) << '\n';
}
程式輸出為
5
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/441481.html
