如何在C++中判断两个数组是否环型相等
环型相等指的是1,3,2 和 2,1,3相等。
这个题应该的算法应该怎么写?我是这样想的
(1)定义两个迭代器i1、i2分别指向两个数组a[] b[]的首元素,
(2)i1逐步加一,遍历a[]
(3)当遇到与b[]的首元素相同的元素时,i1、i2同时加一,比较i1、i2的值
(4)若迭代器的值仍相等则重复(2)操作
(5)若不相等,则i2减一(回到原来位置),重复(2)操作
这样的思路对么,可是我不知道该用什么样的算法实现。请大侠指教!
[解决办法]
#include <iostream>
using namespace std;
bool compareArray(int *n1 ,int *n2 ,int n)
{
int *p1 = n1;
int *p2 = n2;
int i = 0;
l1:for (; i != n; ++i,p2++)
{
if (*p1 == *p2)
{
break;
}
}
p2 = n2;
if (i == n)
{
return false;
}
else
{
for (int j = 1; j != n; ++j)
{
if (p1[j] != p2[(j+i)%n])
{
goto l1;
}
}
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n1[5] = {2 ,1 ,2 ,8 ,10};
int n2[5] = {1 ,2 ,8 ,10 ,2};
compareArray(n1 ,n2 ,5)? cout << "true" << endl :cout << "false" << endl;
return 0;
}