Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนอาร์เรย์ย่อยที่สามารถจัดเรียงองค์ประกอบใหม่เพื่อสร้างพาลินโดรมใน C++


เราได้รับอาร์เรย์ขององค์ประกอบจำนวนเต็มและภารกิจคือการคำนวณจำนวนอาร์เรย์ย่อยที่สามารถเกิดขึ้นได้จากอาร์เรย์ที่กำหนดเพื่อให้องค์ประกอบสามารถสร้างพาลินโดรมที่ถูกต้องได้ 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