ภารกิจคือการค้นหาจำนวนสูงสุดของเมทริกซ์ไบนารีที่เป็นไปได้โดยมีข้อจำกัดดังต่อไปนี้
จำนวนเต็มสองจำนวน N และ X ถูกกำหนดโดยที่ X<=N ขนาดของเมทริกซ์ไบนารีควรเป็น N*N และทุกเมทริกซ์ย่อยที่มีขนาด X*X ควรมีอย่างน้อยหนึ่งศูนย์
มาทำความเข้าใจสิ่งที่เราต้องทำโดยใช้ตัวอย่างกัน −
ป้อนข้อมูล − N=4, X=2
ผลผลิต − 12
คำอธิบาย − เมทริกซ์ผลลัพธ์จะเป็น -
1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1
ป้อนข้อมูล − N=7, X=3
ผลผลิต − 45
แนวทางที่ใช้ในโปรแกรมด้านล่างดังนี้
-
เพื่อให้ได้จำนวนสูงสุด ขั้นแรกเราต้องค้นหาจำนวนศูนย์ขั้นต่ำที่จำเป็นในเมทริกซ์ที่กำหนด
เมื่อสังเกตรูปแบบทั่วไปในเมทริกซ์ทั้งหมด จะเห็นว่าจำนวนศูนย์ที่ต้องการ =(N / X) 2
ดังนั้นจำนวนสูงสุด =องค์ประกอบทั้งหมดในเมทริกซ์ – จำนวนศูนย์\
-
ในฟังก์ชัน MaxOne() ให้สร้างตัวแปร Z ประเภท int และเก็บค่าศูนย์ขั้นต่ำที่ต้องการซึ่งเท่ากับ (N / X) 2
-
จากนั้นเริ่มต้นตัวแปรอื่น Total =N*N ของประเภท int เพื่อเก็บขนาดรวมของเมทริกซ์
-
จากนั้นให้เริ่มต้น int ans =total – Z เพื่อเก็บคำตอบสุดท้ายและส่งกลับ ans
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int MaxOne(int N, int X){ // Minimum number of zeroes that are needed int Z = (N / X); Z = Z * Z; /* Totol elements in matrix = square of the size of the matrices*/ int total =N * N; //Final answer int ans = total - Z; return ans; } int main(){ int N = 4; int X = 2; cout << MaxOne(N, X); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -
12