将给定数组经过 K 循环移位后分成两半,然后使用按位或计算数组总和
在 C++ 中,拆分数组意味着将数组分成多个子数组。按位或用于处理 C++ 中两个位或索引之间的比较和计算。在本文中,我们使用 k 循环移位,这意味着最后一个索引位置将根据第 k 次移位到零索引位置,即第一个数组元素。
让我们举一个例子来理解数组中的循环移位。
给定的数组为 1、2、3、4、5、6、7,长度为 6。
现在我们将值 3 分配给 k,这意味着循环移位 k 次。
循环移位操作的以下步骤是 -
步骤 1 - 我们将 index[6] 移位到 index[1],然后 index[5] 保存 index[6] 的位置。第一个循环移位变为 7,1,2,3,4,5,6,这样循环移位就会循环。
步骤 2 - 第二个循环移位 - 6,7,1,2,3,4,5
步骤 3 - 第三个循环移位 - 5,6,7,1,2,3,4(最终结果)
语法
vector <data_type>l; vector_name(参数 1, 参数 2)
Vector 用作关键字,datatype 是用户提到的数据类型。最后,vector_name 表示用户指定的向量的名称。
第一个参数指定向量的大小。第二个参数是用于初始化向量每个元素的值。
splitArray[i%2] = splitArray[i%2] | arr[(i+k)%arr.size()]
mod(%)运算符将数组拆分为两半,通过使用按位或'|',我们得到两半中每个元素的值。
'arr[(i+k)%arr.size()]'表示移位索引,执行按位或时,它将给出拆分数组中的两个元素之一,这是基于'splitArray[i%2]'的对应关系。
算法
我们将使用头文件'iostream'和'vector'启动程序。
我们将定义一个名为'Split_arr_sum_bitwise' 以 'arr' 和 'k' 为参数。此函数接收数组值和循环移位后更新的数组值。
我们将在 'Split_arr_sum_bitwise' 函数中初始化名为 'splitArray' 的向量变量。此函数将存储数组的两半。
接下来,将值 0 存储在变量 sum 中,该变量稍后将与名为 'splitArray' 的函数的数组使用按位或'|'进行加法运算。
然后我们创建第一个 for 循环,在这里我们将迭代原始数组。
然后我们将创建第二个 for 循环,使用按位或'|'计算两个半部的总和。此运算符将在 K 循环移位后将数组总和拆分为两半。
现在启动主函数,我们将数组值初始化为 'array' 变量,并将值 '3' 存储在变量 'k' 中,该变量将定义给定数组的循环移位次数。
最后,在打印语句中,我们调用名为 'Split_arr_sum_bitwise' 的函数,并将参数 'K' 和 'array' 传递给它以获得最终输出。
示例
在此程序中,我们将使用按位或实现数组总和,然后在 K 循环移位后将数组拆分为两半。
#include <iostream> #include <vector> using namespace std; int Split_arr_sum_bitwise(vector<int>& arr, int k) { vector<int> splitArray(2,0); int sum = 0; // 经过 K 循环移位后将数组分成两半。 for (int i = 0; i < arr.size(); i++) { splitArray[i % 2] = splitArray[i % 2] | arr[(i + k) % arr.size()]; } // 使用按位或运算计算两个半数之和 for (int i = 0; i < splitArray.size(); i++) { sum = sum | splitArray[i]; } return sum; } int main() { vector<int> array = {1, 2, 3, 4, 5, 6, 7}; int k = 3; cout <<"使用按位或对数组两半进行拆分和是 "<<Split_arr_sum_bitwise(array, k) << endl; return 0; }
输出
使用按位或对数组两半进行拆分和是 7
结论
我们探索了 K 循环移位的概念,其中数组被分成两半,并且还了解了按位或如何执行和以存储拆分数组的值。 % mod 运算符将数组分成两半,显示了对数组索引位置的奇数和偶数的计算。