在 C++ 中计算通过的汽车对
我们得到一个长度为N的数组,其中只包含0和1。值1表示汽车向西行驶,值0表示汽车向东行驶。
如果一对汽车A和汽车B满足0<=A
让我们用例子来理解
输入-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(intarr[],intsize)将数组和长度作为输入并返回通过的汽车数量。
取初始计数为0。
从索引i=0到i
如果arr[i]为0,则从索引j=i+1到j
对于每个arr[j]作为1增量计数作为对(arr[i],arr[j])是(0,1)和i
最后我们将得到总数。
返回计数作为结果。
有效的方法
在这种方法中,我们将从末尾遍历数组。从最后开始计算所有的1。对于每个前0(从末尾开始),没有。对将是1的计数,即温度。
取一个包含0和1的数组arr[]。
函数count_cars(intarr[],intsize)将数组和长度作为输入并返回通过的汽车数量。
取初始计数为0。
使用while循环从末尾遍历数组直到size>=1。
如果arr[size-1]为1,则为到目前为止找到的1的数量增加变量temp。
否则它是0(它的索引低于所有1的remp)。对将是临时的。设置计数=计数+温度。
减少下一个元素的大小。
最后我们将得到总数。
返回计数作为结果。
示例(幼稚的方法)
#includeusing namespace std; int count_cars(int arr[], int size){ int count = 0; for (int i=0; i 输出结果 如果我们运行上面的代码,它将生成以下输出-
过车对数为: 2示例(有效方法)
#includeusing 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<<"过车对数为: "< 输出结果 如果我们运行上面的代码,它将生成以下输出-
过车对数为: 2