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

ขั้นต่ำ 1 วินาทีในการให้พลังงานเพื่อทำให้อาร์เรย์ทั้งหมดมีประสิทธิภาพโดยใช้ C++


เราได้รับอาร์เรย์ไบนารีซึ่งสามารถเก็บตัวเลข 1 และ 0 ของขนาดที่กำหนดและตัวแปรจำนวนเต็ม สมมติว่า ฐาน งานคือการคำนวณค่าต่ำสุด 1 ที่สามารถให้พลังงานแก่องค์ประกอบอื่น ๆ ของอาร์เรย์ไบนารีเพื่อให้อาร์เรย์ทั้งหมดมีประสิทธิภาพ องค์ประกอบสามารถให้พลังงานแก่องค์ประกอบที่อยู่ติดกันหรือองค์ประกอบอื่นใดภายในระยะทางน้อยกว่าฐาน

ให้เราดูสถานการณ์อินพุตเอาต์พุตต่างๆ สำหรับสิ่งนี้ -

ใน - int arr[] ={1, 1, 0, 1, 1, 0, 1}, ฐาน int =7

ออก - ขั้นต่ำ 1 วินาทีในการให้พลังงานเพื่อทำให้อาร์เรย์ทั้งหมดมีประสิทธิภาพคือ:1

คำอธิบาย − เราได้รับอาร์เรย์ไบนารีขนาด 7 และค่าของฐานเป็น 7 ซึ่งหมายความว่าตัวเลข 1 ตัวแรกที่พบสามารถให้พลังงานแก่อาร์เรย์ทั้งหมดได้ ดังนั้น ตัวเลข 1 ที่ arr[1] สามารถให้พลังงานแก่องค์ประกอบอื่นๆ ทั้งหมดของอาร์เรย์ได้

ใน - int arr[] ={1, 1, 0, 1, 1, 0, 1}, int ฐาน =3

ออก − ขั้นต่ำ 1 วินาทีในการให้พลังงานเพื่อทำให้อาร์เรย์ทั้งหมดมีประสิทธิภาพคือ:2

คำอธิบาย − เราได้รับอาร์เรย์ไบนารีขนาด 7 และค่าของฐานเป็น 2 ซึ่งหมายความว่าตัวเลขแรกที่พบ 1 สามารถให้พลังงานแก่องค์ประกอบสองรายการถัดไปของอาร์เรย์ ดังนั้น ตัวเลข 1 ที่ arr[2] สามารถให้พลังงานแก่องค์ประกอบสององค์ประกอบถัดไปของอาร์เรย์ และอีกองค์ประกอบหนึ่งที่ arr[5] สามารถให้พลังงานแก่สององค์ประกอบถัดไปของอาร์เรย์ ซึ่งทำให้อาร์เรย์ทั้งหมดมีประสิทธิภาพ

ใน - int arr[] ={1, 1, 0, 1, 1, 0, 1}, ฐาน int =1

ออก − เป็นไปไม่ได้ที่จะทำให้ทั้งอาร์เรย์มีประสิทธิภาพ

คำอธิบาย − เราได้รับอาร์เรย์ไบนารีขนาด 7 และค่าของฐานเป็น 1 ซึ่งหมายความว่าตัวเลขแรกที่พบ 1 สามารถให้พลังงานแก่องค์ประกอบเดี่ยวถัดไปของอาร์เรย์ ดังนั้นจึงเป็นไปไม่ได้ที่จะทำให้ทั้งอาร์เรย์มีประสิทธิภาพ

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้ −

  • ป้อนไบนารีอาร์เรย์ของขนาดที่กำหนดและตัวแปรจำนวนเต็ม สมมติว่า ฐาน

  • คำนวณขนาดของอาร์เรย์และประกาศตัวแปร สมมุติว่า val ของประเภทจำนวนเต็ม

  • ตั้งค่าวาลด้วยการเรียกใช้ฟังก์ชันที่จะคืนค่าขั้นต่ำ 1 ที่จำเป็นเพื่อสร้างอาร์เรย์ที่มีประสิทธิภาพ และหากไม่สามารถทำได้ก็จะคืนค่า -1 ซึ่งจะแสดงข้อความแสดงข้อผิดพลาดเพิ่มเติม

  • ภายในฟังก์ชัน Lend_Power(int arr[], int size, int base)

    • ประกาศอาร์เรย์ของค่าประเภทจำนวนเต็มที่มีขนาดของอาร์เรย์ไบนารี

    • ประกาศตัวแปรชั่วคราวเป็น temp และตั้งค่าเป็น -1 แล้วนับและตั้งค่าเป็น 0

    • เริ่มลูป FOR จาก i ถึง 0 จนถึงขนาดของอาร์เรย์ ภายในลูป ให้ตรวจสอบว่า arr[i] เท่ากับ 1 แล้วตั้งค่า temp เป็น i และตั้งค่า arr_2[i] เป็น temp

    • เริ่มการวนซ้ำ FOR จาก 0 จนถึงขนาดของอาร์เรย์ และตั้งค่า reset_base เป็น i + base - 1 และ reset_size เป็นขนาด - 1. ตั้งค่าตัวแปรที่กำหนดเป็น arr_2[min(reset_base, reset_size)]

    • ตรวจสอบ IF set =-1 OR set + base <=i แล้วคืนค่า -1

    • ตั้งค่าตัวแปร 'i' เป็นชุด + ฐาน

  • จำนวนคืน

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;

int Lend_Power(int arr[], int size, int base)
{
   int arr_2[size];
   int temp = -1;
   int count = 0;
   for(int i = 0; i < size; i++)
   {
      if(arr[i] == 1)
      {
         temp = i;
      }
      arr_2[i] = temp;
   }
   for(int i = 0; i < size;)
   {
      int reset_base = i + base - 1;
      int reset_size = size - 1;

      int set = arr_2[min(reset_base, reset_size)];
      if(set == -1 || set + base <= i)
      {
         return -1;
      }
      i = set + base;
      count++;
   }
   return count;
}
int main()
{
   int arr[] = {1, 1, 0, 1, 1, 0, 1};
   int base = 2;
   int size = sizeof(arr) / sizeof(arr[0]);
   int val = Lend_Power(arr, size, base);
   if(val == -1)
   {
      cout<<"Impossible to make entire array powerful";
   }
   else
   {
      cout<<"Minimum 1s to lend power to make whole array powerful are: "<<val;
   }
   return 0;
}

ผลลัพธ์

หากเรารันโค้ดด้านบน มันจะสร้าง Out

. ดังต่อไปนี้
Minimum 1s to lend power to make whole array powerful are: 3