第一个数组有两种可能的方式,无论它是否包含不重复的元素。假设为简单起见,第一个数组不包含重复的元素,那么这个想法很简单,就像我下面的代码一样跟踪总数
#include <iostream>
int main()
{
int arr1[5] = { 1, 2, 3, 4, 5};
int arr2[5] = { 5, 1, 3, 4, 2};
int total(0);
for (unsigned int i(0); i < 5; ++i)
{
for (unsigned int j(0); j < 5; ++j)
{
if ( arr1[i] == arr2[j] )
{
total += 1;
}
}
}
if ( total == 5 )
std::cout << "Same " << std::endl;
else
std::cout << "not Same " << std::endl;
std::cin.get();
return 0;
}
如果总数小于或大于 5,则数组不相同。现在,在我看来,我们需要提出一个计算正确总数的算法,因此我们需要一个接受数组并检查总数的函数。例如,在您的情况下,总数应该是 9(1 代表 3,4 代表 2,4 代表 5)。这就是我想到的。我希望这个想法很清楚。这是我为一般情况所做的
#include <iostream>
int getTotal(int arr[], const int size)
{
int *temp = new int[size];
int total(0);
for (int i(0); i < size; ++i)
temp[i] = arr[i];
for (int i(0); i < size; ++i)
{
for (int j(0); j < size; ++j)
{
if ( arr[i] == temp[j] )
total += 1;
}
}
std::cout << total << std::endl;
return total;
}
int main()
{
int arr1[5] = { 3, 5, 2, 5, 2};
int arr2[5] = { 2, 3, 5, 5, 2};
int total = getTotal(arr1, 5);
int track(0);
for (unsigned int i(0); i < 5; ++i)
{
for (unsigned int j(0); j < 5; ++j)
{
if ( arr1[i] == arr2[j] )
{
track += 1;
}
}
}
if ( track == total )
std::cout << "Same " << std::endl;
else
std::cout << "not Same " << std::endl;
std::cin.get();
return 0;
}
使用一个循环的另一种方法。这个想法是获得一个数组的总数,然后将总数除以每个元素以获得新的总数。如果第一个数组的新总数等于第二个数组的新总数,那么它们是相同的。 (注意:我没有针对所有情况测试我的代码;但是,我的方法对我来说似乎是明智的。
#include <iostream>
double getTotal(double arr[], const int size)
{
double total1(0), total2(0);
for (int i(0); i < 5; ++i)
{
total1 += arr[i];
}
for (int i(0); i < 5; ++i)
{
total2 += total1/arr[i];
}
std::cout << total2 << std::endl;
return total2;
}
int main()
{
double arr1[5] = { 3, 5, 2, 4, 2};
double arr2[5] = { 2, 3, 5, 5, 2};
double total1 = getTotal(arr1, 5);
double total2 = getTotal(arr2, 5);
if ( total1 == total2 )
std::cout << "Same " << std::endl;
else
std::cout << "not Same " << std::endl;
std::cin.get();
return 0;
}