เราได้รับอาร์เรย์ขององค์ประกอบจำนวนเต็มและภารกิจคือการคำนวณจำนวนอาร์เรย์ย่อยที่สามารถเกิดขึ้นได้จากอาร์เรย์ที่กำหนดเพื่อให้องค์ประกอบสามารถสร้างพาลินโดรมที่ถูกต้องได้ Palindromes เป็นซีเควนซ์ที่จัดเรียงคล้าย ๆ กันตั้งแต่ต้นจนจบ
ป้อนข้อมูล − int arr[] ={ 3, 3, 1, 4, 2, 1, 5}
ผลผลิต − จำนวนอาร์เรย์ย่อยที่สามารถจัดองค์ประกอบใหม่ให้กลายเป็นพาลินโดรมได้ − 9
คำอธิบาย − อาร์เรย์ย่อยที่ถูกต้องซึ่งสามารถจัดเรียงองค์ประกอบเพื่อสร้างพาลินโดรมได้คือ {3}, {3}, {1}, {4}, {2}, {1}, {5}, {1, 2, 1 } และ {1, 3, 1} นับรวมเป็น 9
ป้อนข้อมูล − int arr[] ={ 2, 5, 5, 2, 1}
ผลผลิต − จำนวนอาร์เรย์ย่อยที่สามารถจัดองค์ประกอบใหม่ให้กลายเป็นพาลินโดรมได้ − 8
คำอธิบาย − อาร์เรย์ย่อยที่ถูกต้องซึ่งสามารถจัดเรียงองค์ประกอบเพื่อสร้างพาลินโดรมได้คือ {2}, {5}, {5}, {2}, {1}, {5, 2, 5}, {2, 5, 2 }, {2, 5, 5, 2}. นับรวมเป็น 8
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนอาร์เรย์ขององค์ประกอบจำนวนเต็มและคำนวณขนาดของอาร์เรย์และส่งข้อมูลไปยังฟังก์ชันเพื่อการประมวลผลต่อไป
-
ประกาศการนับตัวแปรชั่วคราวเพื่อเก็บอาร์เรย์ย่อยของ palindrome
-
เริ่มวนรอบ FOR จาก 0 ถึงขนาดของอาร์เรย์
-
ภายในลูป ให้ประกาศตัวแปรประเภท long long และตั้งค่าเป็น 1LL <
-
เรียกใช้ฟังก์ชันภายในตัวแปรบูลีนที่จะคืนค่าจริงหรือเท็จ
-
ตรวจสอบว่า temp เป็น 0LL หรือ ch เป็น True จากนั้นให้เพิ่มจำนวนขึ้น 1
-
คืนจำนวน
-
พิมพ์ผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using 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: "<<palindromes_rearrange(arr, size); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of sub-arrays whose elements can be re-arranged to form palindromes are: 9