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

ยกกำลังสองและลำดับย่อยใน C++


ในปัญหานี้ เราจะได้รับอาร์เรย์จำนวนเต็ม N งานของเราคือการหาจำนวนลำดับที่ตามมาที่สามารถเกิดขึ้นได้ โดยที่หากองค์ประกอบของพวกมันถูกคูณ ก็จะได้ผลลัพธ์เป็นจำนวนที่เป็นกำลังสอง

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล − arr =[2, 5, 4]

ผลผลิต − 3

คำอธิบาย − ลำดับถัดมา [2], [4] และ [2, 4] ให้ผลลัพธ์ที่ต้องการ

เพื่อแก้ปัญหานี้ เราต้องเข้าใจตรรกะของอำนาจ

เฉพาะตัวเลขที่มีกำลัง 2 เท่านั้นที่จะคูณเพื่อให้ได้ผลลัพธ์ที่ต้องการ ดังนั้น เราต้องพิจารณาเฉพาะส่วนต่อจากอาร์เรย์ที่ตัวเองมีกำลัง 2

ดังนั้น หากในอาร์เรย์มีองค์ประกอบ M ที่มีกำลัง 2 การนับอาร์เรย์ย่อยจะเป็น 2 M - 1

ตัวอย่าง

โปรแกรมแสดงการใช้งานโซลูชันของเรา

#include <iostream>
#include <math.h>
using namespace std;
bool isPowerTwo(int num) {
   if (num == 0)
      return false;
   if (num == 1)
      return true;
   if (num & (num - 1))
      return false;
   return true;
}
int SubsequenceWithPowerTwo(int arr[], int N) {
   int count = 0;
   for (int i = 0; i < N; i++)
      if (isPowerTwo(arr[i]))
         count++;
   return (int)(pow(2, count)) - 1;
}
int main() {
   int arr[] = {5, 4, 8, 12, 32, 9 };
   int N = sizeof(arr)/sizeof(arr[0]);
   cout<<"No. of subsequences which multiply to a number which is a power of 2 are : ";
   cout<<SubsequenceWithPowerTwo(arr, N)<<endl;
   return 0;
}

ผลลัพธ์

No. of subsequences which multiply to a number which is a power of 2 are : 7