给定一个由N 个整数组成的数组arr[] ,任务是计算即使通过任意次数替换数组元素也可以使数组元素的乘积的方法的数量。由于计数可能非常大,打印计数模 10 9 +7。
例子:
Input: arr[] = {1, 3}
Output: 3
Explanation:
Operation 1: Replacing arr[0] by 2. Therefore, arr[] modifies to {2, 3}. Product = 6.
Operation 2: Replacing arr[0] by 10. Therefore, arr[] modifies to {1, 10}, Product= 10.
Operation 3: Replacing arr[0] and arr[1] by 2. Therefore, arr[] modifies to {2, 2}, Product = 4.
Hence, 3 possible ways exists.
Input: arr[] = {3}
Output: 1
方法:想法是使用Greedy Approach来解决这个问题。
请按照以下步骤解决问题:
- 为了使数组的乘积为even ,必须至少存在一个偶数数组元素。
- 遍历数组。对于每个数组元素,会出现以下两种情况:
- 如果阵列由单个元件的唯一,则只有一个方式中存在,使该阵列的产物均匀。
- 否则, 2 N – 1种方式。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to count ways to make
// product of given array even.
void makeProductEven(int arr[], int N)
{
int m = 1000000007, ans = 1;
// Calculate 2 ^ N
for (int i = 0; i < N; i++)
{
ans = (ans * 2) % m;
}
// Print the answer
cout << ans - 1;
}
// Driver Code
int main()
{
// Given array
int arr[] = { 1, 3 };
// Size of the array
int N = sizeof(arr) / sizeof(arr[0]);
makeProductEven(arr, N);
return 0;
}
Java
// Java program for above approach
/*package whatever //do not write package name here */
import java.io.*;
class GFG
{
// Method to count ways to make
// product of given array even.
static void makeProductEven(int arr[], int N)
{
int m = 1000000007, ans = 1;
// Calculate 2 ^ N
for (int i = 0; i < N; i++)
{
ans = (ans * 2) % m;
}
// Print the answer
System.out.println(ans - 1);
}
public static void main(String[] args)
{
// Given array
int arr[] = { 1, 3 };
// Size of the array
int N = arr.length;
makeProductEven(arr, N);
}
}
// This code is contributed by shubham agrawal
Python3
# Python3 program for the above approach
# Function to count ways to make
# product of given array even.
def makeProductEven(arr, N) :
m = 1000000007; ans = 1;
# Calculate 2 ^ N
for i in range(N) :
ans = (ans * 2) % m;
# Print the answer
print(ans - 1);
# Driver Code
if __name__ == "__main__" :
# Given array
arr = [ 1, 3 ];
# Size of the array
N = len(arr);
makeProductEven(arr, N);
# This code is contributed by AnkThon
C#
// C# program for above approach
/*package whatever //do not write package name here */
using System;
public class GFG
{
// Method to count ways to make
// product of given array even.
static void makeProductEven(int []arr, int N)
{
int m = 1000000007, ans = 1;
// Calculate 2 ^ N
for (int i = 0; i < N; i++)
{
ans = (ans * 2) % m;
}
// Print the answer
Console.WriteLine(ans - 1);
}
// Driver code
public static void Main(String[] args)
{
// Given array
int []arr = { 1, 3 };
// Size of the array
int N = arr.Length;
makeProductEven(arr, N);
}
}
// This code is contributed by shikhasingrajput
Javascript
输出
3
时间复杂度: O(N)
辅助空间: O(1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live