在 C++ 中计算通过的汽车对

我们得到一个长度为 N 的数组,其中只包含 0 和 1。值 1 表示汽车向西行驶,值 0 表示汽车向东行驶。

如果一对汽车 A 和汽车 B 满足 0<=A<B<N,我们将经过的汽车计为 1。这里A向东,B向西。最终,我们将计算 (0,1) 对,其中索引 0 小于索引 1。

让我们用例子来理解

输入- arr[] = {1,0,1,0,1}

输出- 通过的汽车对的数量是:3

说明- 索引 0 小于 1 的 (0,1) 对是 - (arr[1],arr[2]), (arr[1],arr[4]), (arr[3], arr[4])

输入- arr[] = {1,0,0,0,0}

输出- 通过的汽车对数为:0

说明- 不存在索引 0 小于 1 的 (0,1) 对。

下面程序中使用的方法如下

我们将使用两种方法。第一种使用两个 for 循环的幼稚方法。开始遍历数组,当遇到0时从该点开始遍历数组再次结束,遇到1时增加计数。

  • 取一个包含 0 和 1 的数组 arr[]。

  • 函数 count_cars(int arr[], int size) 将数组和长度作为输入并返回通过的汽车数量。

  • 取初始计数为 0。

  • 从索引 i=0 到 i<length-1 遍历数组。

  • 如果 arr[i] 为 0,则从索引 j=i+1 到 j<length 再次遍历数组。

  • 对于每个 arr[j] 作为 1 增量计数作为对 (arr[i],arr[j]) 是 (0,1) 和 i<j。

  • 最后我们将得到总数。

  • 返回计数作为结果。

有效的方法

在这种方法中,我们将从末尾遍历数组。从最后开始计算所有的 1。对于每个前 0(从末尾开始),没有。对将是 1 的计数,即温度。

  • 取一个包含 0 和 1 的数组 arr[]。

  • 函数 count_cars(int arr[], int size) 将数组和长度作为输入并返回通过的汽车数量。

  • 取初始计数为 0。

  • 使用 while 循环从末尾遍历数组直到 size>=1。

  • 如果 arr[size-1] 为 1,则为到目前为止找到的 1 的数量增加变量 temp。

  • 否则它是 0(它的索引低于所有 1 的 remp)。对将是临时的。设置计数 = 计数 + 温度。

  • 减少下一个元素的大小。

  • 最后我们将得到总数。

  • 返回计数作为结果。

示例(幼稚的方法)

#include<bits/stdc++.h>
using namespace std;
int count_cars(int arr[], int size){
   int count = 0;
   for (int i=0; i<size-1; i++){
      if(arr[i] == 0){
         for (int j=i+1; j<size; j++)
         if (arr[j]==1){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = {1, 1, 0, 0, 1};
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"过车对数为: "<<count_cars(arr, size);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出 -

过车对数为: 2

示例(有效方法)

#include<bits/stdc++.h>
using namespace std;
int count_cars(int arr[], int size){
   int count = 0;
   int temp = 0;
   while (size >= 1){
      if (arr[size-1] == 1){
         temp++;
      }
      else{
         count = count + temp;
      }
      size--;
   }
   return count;
}
int main(){
   int arr[] = {1, 1, 0, 1, 1};
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"过车对数为: "<<count_cars(arr, size);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出 -

过车对数为: 2

猜你喜欢