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