首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

(散分)急求一组数的周期,该如何解决

2012-11-20 
(散分)急!求一组数的周期背景:现在有一组整形数,但是数据是否有周期不清楚。问题:通过程序实现对数据周期进

(散分)急!求一组数的周期
背景:现在有一组整形数,但是数据是否有周期不清楚。
问题:通过程序实现对数据周期进行判断,如果有周期,则计算出周期值,如果不是周期的,给出结论。
如: 1 , 4 , 3, 2, 4, 5 (无周期)
  0 , 2, 0, 2, 0, 2 (有周期)
(注:事个数据只会是有周期和无周期状态,不存在在一个无周期中找出一个周期的情况,如(1, 2, 3, 2, 3, 4, 5)中的2, 3不作为考虑。)
(注:通过穷举法实现的不作考虑。)


[解决办法]
参考:

C/C++ code
#include<iostream> #include<cstring>using namespace std;int calculate_cycle(int* arr, int length){    int i = 0;    int j = 0;    int cycle_length = 1;loop:    for(i = 0; i < length / cycle_length; ++i)    {        for(j = 0; j < cycle_length; ++j)        {            if(*(arr + j) != *(arr + i * cycle_length + j))            {                do                {                    ++cycle_length;                }                while(length % cycle_length != 0);                goto loop;            }        }    }    if((i == length / cycle_length) && (length != cycle_length))    {        return cycle_length;        // 返回周期长度    }    return 0;                        // 如果没有周期性则返回0}int main(int argc, char* argv[]){    int a[] = {1, 2, 3, 4, 5, 6, 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1};    int length = sizeof(a) / sizeof(a[0]);    cout << calculate_cycle(a, length) << endl;    return 0;  }
[解决办法]
C/C++ code
#include<iostream>#include<fstream>#include<vector>using namespace std;int calculate_cycle(int* arr, int length){    if(length %2 == 1) return 0;    int beginIndex = 0,endIndex = length-1;    int cycle_length = 0;    vector<int> beginArray,endArray;    for ( ;endIndex >= beginIndex;beginIndex ++,endIndex--)    {        beginArray.push_back(arr[beginIndex]);        endArray.insert(endArray.begin(),arr[endIndex]);        if (beginArray == endArray)        {            cycle_length = beginArray.size();            break;        }    }        for (int i = beginIndex + 1;i<=endIndex ;i+=cycle_length)    {        for (int j = i,k=0;k<cycle_length;j++,k++)        {            if(arr[j]!=beginArray[k]) return 0;        }    }    return cycle_length;                     }int main(){    int a[] = {2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,1};    int length = sizeof(a) / sizeof(a[0]);    cout << calculate_cycle(a, length) << endl;    return 0;}
[解决办法]
探讨

引用:

引用:

引用:

楼上的“错误”不是错误。

嗯,基本上是正确的,是我的测试数据没有和我上面的描述对应。
1,第一组数中,是故意有一个数是错的,大体上是周期的。
2,第三组数中,最后一个周期是不完整的。但理论上应该可以认为是周期的。
我是觉得第一种情况可以不考虑,但是对于不完整周期,还是需要考虑一下。
……

热点排行