เราได้รับอาร์เรย์ไบนารีซึ่งสามารถเก็บตัวเลข 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