使用嵌套循环比较数组成员,计算满足条件(if)的次数

时间:2015-12-03 17:56:31

标签: c++ arrays if-statement compare nested-loops

我比较了三个不同的数组,在我的例子中,我的程序正在检查一个特定圆相交的其他圆圈数。我的功能是:

void Intersection(int n, int A[], int B[], int C[]) 
{
ofstream out(rez);
   for (int i = 0; i < n; i++)
     {
       times_condition_met=0;
         for (int j = 0; j < n; j++)
         {
             if (Distance(X, Y, i, j) < (Radius[i] + Radius[j]))
             {
                 times_condition_met++;
             } 
         }
     }
}

我的三个不同阵列中的圆心和半径的坐标。

 X[] Y[] and R[]

这是必须满足的条件

if (Distance(X, Y, i, j) < (Radius[i] + Radius[j]))
            times_condition_met++;

函数Distance找到两点之间的距离(在圆心之间)。

当计算一个特定圆与之相交的其他圆圈时,我遇到的问题是当我的函数检查条件是否满足时,例如如果Circle1Circle2 times_condition_met++相交,则稍后循环检查Circle2是否与Circle1相交,它会再次times_condition_met++。那么我应该使用哪种if Circle1Circle2相交,Circle2Circle1相交会被视为条件只满足一次两个?

1 个答案:

答案 0 :(得分:1)

我认为你的for循环需要更新。

尝试:

   for (int i = 0; i < n-1; i++)   // Update here
     {
       times_condition_met=0;
         for (int j = i+1; j < n; j++) // Update here

通过这种方式,您只会比较两次特定的圈子。

在第一个循环中,圆圈0将与圆圈1,2,...,n-1

进行比较

在第二个循环中,圆圈1将与圆圈2,3,...,n-1

进行比较

在第三个循环中,圆圈2将与圆圈3,4,...,n-1

进行比较

依旧......

在最后一个循环中,将n-2与圆圈n-1进行比较

所有在一起 - 任何一对圆圈只检查一次。

要计算哪个圆圈与大多数圆圈相交,您可以这样做:

   // Make a vector with n elements - all initialized to zero
   std::vector hitcounter(n, 0); 

   for (int i = 0; i < n-1; i++)
   {
        times_condition_met=0;
        for (int j = i+1; j < n; j++)
        {
             if (Distance(X, Y, i, j) < (Radius[i] + Radius[j]))
             {
                 times_condition_met++;

                 // increment hit counter
                 hitcounter[i] = hitcounter[i] + 1;
                 hitcounter[j] = hitcounter[j] + 1;
             } 
        }
   }

   int top = -1;
   int topIndex = -1;
   for (int i = 0; i < n; i++)
   {
       if (hitcounter[i] > top)
       {
           top = hitcounter[i];
           topIndex = i;
       }
   }

   if (top == -1)
   {
       cout << "No intersect found" << endl;
   }
   else
   {
       cout << "Most intersect found for circle " << topIndex << " Hits=" << top << endl;
   }