2つのアレイ:
a[] = {1 2 3 4}
b[] = {3 4 1 2}
一番下の配列は、単に一番上の配列を右に2か所シフトしたものです。上の配列を右シフトして下の配列を作成できる場合は、それらをシフト等価と呼びます。
2つの配列が「シフト等価」であるかどうかを判断するための関数(ブール関数を使用する必要があります)を作成する試みは次のとおりです。
#include <iostream>
using namespace std;
bool equivalent(int a[], int b[], int size) {
int value; // if 1 returns as truth
int k; // counter to compare both arrays
for (int j = 0; j <= size; j++) {
for (int i = 0; i <= size; i++) {
a[i] = a[i + j];
}
}
for (k = 0; k <= size; k++) {
if (a[k] != b[k]) {
value = 0;
} else value = 1;
}
return (value == 1);
}
int main() {
int n;
cout << "Please input a size " << endl;
cin >> n;
int *mtrx = new int[n];
int *mtrx1 = new int[n];
int x;
for (x = 0; x < n; x++) {
cout << "Please make entries for the first array: " << endl;
cin >> mtrx[x];
}
x = 0;
for (x = 0; x < n; x++) {
cout << "Please make entries for the 2nd array: " << endl;
cin >> mtrx1[x];
}
bool answr = equivalent(mtrx, mtrx1, n = n - 1);
if (answr) {
cout << "They are shift equivalent." << endl;
} else {
cout << "They are not shift equivalent." << endl;
}
delete[] mtrx;
delete[] mtrx1;
system("PAUSE");
return 0;
}
プログラムを実行するときは、シフトの同等性をテストするためにarray1 = {1 2 3}
とを使用します。array2 = {3 1 2}
彼らはそうなるはずですが、私のプログラムはそうではないと言っています。