数组可重复划分为和相等的子数组的次数
在 C++ 中,我们有一个 vector 头文件,可以在运行时更改数组的大小。在本文中,我们将学习数组可重复划分为和相等的子数组的次数的概念。
让我们举个例子来说明和相等的数组划分。
给定的数组是{1,2,3,4,2},我们将数组细分为两部分:
{1,2,3} - 数组每个索引的总和为6。
{4,2} - 数组每个索引的总和为6。
所以,给定数组可以划分为和相等的子数组2次。
算法
我们将从名为‘iostream’和‘vector’的头文件开始程序。
现在我们开始创建名为‘isPartition_arr’的类来编写程序。
在公共部分,声明名为‘isPartition_arr’的构造函数,它接受 num 作为参数来处理数组元素值。
我们定义了一个名为‘cnt_Partition’的整型函数来计算数组可以划分的总次数。
我们将变量‘sum’初始化为‘0’,稍后它将对数组进行求和,并将‘0’存储到变量‘count’中,该变量将跟踪数组元素递增计数。然后声明 for 循环以迭代‘arr’向量的每个元素。
我们将变量‘current_sum’初始化为‘0’,并使用 for 循环迭代每个元素。
完成 for 循环后,我们开始使用 while 循环迭代每个元素。
如果‘current_sum’等于‘sum/2’,则计数将递增‘1’,并将‘current_sum’重置为‘0’。接下来,返回‘cnt’将计算数组可以细分为相等和的次数。
我们从主函数开始,创建一个向量类型的整数‘num’来存储数组值。
然后我们通过创建类的对象来传递‘num’值。接下来,我们调用函数‘cnt_partition’,获取对象并将其存储在变量 ‘c’ 中。
最后,我们使用变量‘c’打印输出语句:“数组可以划分为两个和相等的子数组的次数”。
示例
在这个程序中,我们将找到数组可以重复划分为两个和相等的子数组的次数。
#include <iostream> #include <vector> using namespace std; class isPartition_arr { public: vector<int> arr; isPartition_arr(vector<int>& num) { arr = num; } int cnt_Partition() { int sum = 0, count = 0; for (int i = 0; i < arr.size(); i++) { sum += arr[i]; } int current_sum = 0, j=0; while( j < arr.size() ) { current_sum += arr[j]; if (current_sum == sum / 2) { current_sum = 0; count++; } j++; } return count; } }; int main() { vector<int> num = {1, 2, 3, 4, 5, 5}; isPartition_arr A(num); int c = A.cnt_Partition(); cout <<"Number of times an array can be partitioned into\t"<< c <<"\t two subarrays with equal sum " << endl; return 0; }
输出
Number of times an array can be partitioned into 2 two subarrays with equal sum
结论
我们探讨了和相等的数组划分的概念,学习了如何将数组细分为不同的部分,并使总和相等。我们使用面向对象编程 (OOP) 的概念来解决这个问题,因为代码的可读性更好,并且可以有效地定义 C++ 程序。