在 C++ 中可以重新排列其元素以形成回文的子数组的计数
给定一个整数元素数组,任务是计算可以从给定数组形成的子数组的数量,以便其元素可以形成有效的回文。回文是从头到尾排列相似的序列。
输入-intarr[]={3,3,1,4,2,1,5}
输出-其元素可以重新排列以形成回文的子数组的计数为-9
说明-其元素可以排列形成回文的有效子数组是{3},{3},{1},{4},{2},{1},{5},{1,2,1}和{1,3,1}。因此,总数为9。
输入-intarr[]={2,5,5,2,1}
输出-其元素可以重新排列以形成回文的子数组的计数为-8
说明-元素可以排列形成回文的有效子数组是{2},{5},{5},{2},{1},{5,2,5},{2,5,2},{2,5,5,2}。因此,总数为8。
下面程序中使用的方法如下
输入一个整数元素的数组并计算数组的大小并将数据传递给函数进行进一步处理。
声明一个临时变量count来存储回文的子数组。
从0开始循环FOR直到数组的大小
在循环内,声明一个longlong类型的变量并将其设置为1LL<
在布尔变量中调用一个函数,该函数将返回true或false。
检查IFtemp为0LL或ch为True然后将计数增加1
返回计数
打印结果。
示例
#includeusing namespace std; bool check(long long temp){ return !(temp & (temp - 1LL)); } int palindromes_rearrange(int arr[], int size){ int count = 0; for (int i = 0; i < size; i++){ long long temp = 0LL; for (int j = i; j < size; j++){ long long val = 1LL << arr[j]; temp = temp ^ val; bool ch = check(temp); if (temp == 0LL || ch){ count++; } } } return count; } int main(){ int arr[] = { 3, 3, 1, 4, 2, 1, 5}; int size = sizeof(arr) / sizeof(arr[0]); cout<<"Count of sub-arrays whose elements can be re-arranged to form palindromes are: "< 输出结果 如果我们运行上面的代码,它将生成以下输出-
Count of sub-arrays whose elements can be re-arranged to form palindromes are: 9