เราได้รับสี่เหลี่ยมด้านยาว L และความกว้าง B เพื่อให้ L>=B เป้าหมายคือการหาจำนวนสี่เหลี่ยมจัตุรัสที่สี่เหลี่ยมขนาด LXB สามารถรองรับได้
รูปด้านบนแสดงสี่เหลี่ยมผืนผ้าขนาด 3 X 2 มี 2, 2X2 สี่เหลี่ยม และ 6,1X1 สี่เหลี่ยมจัตุรัสอยู่ในนั้น
สี่เหลี่ยมทั้งหมด=6+2=8.
-
สี่เหลี่ยมขนาด LXB ทุกอันมีหมายเลข L*B สี่เหลี่ยม 1X1
-
สี่เหลี่ยมที่ใหญ่ที่สุดคือขนาด BXB
-
สำหรับ L=B=1 กำลังสอง =1
-
สำหรับ L=B=2 กำลังสอง =1 + 4 =5. ( 1 ของ 2X2, 4 ของ 1X1 )
-
สำหรับ L=B=3 สี่เหลี่ยมจัตุรัส =1 + 4 + 9 =14 ( 1 ของ 3X3, 4 ของ 2X2, 9 ของ 1X1 )
-
สำหรับ L=B=4 สี่เหลี่ยมจัตุรัส =1 + 4 + 9 + 16 =30 ( 1 ของ 4X4, 4 ของ 3X3, 9 ของ 2X2, 16 ของ 1X1 )
-
……………..
-
สำหรับสี่เหลี่ยม BXB ทุกจำนวนสี่เหลี่ยมคือ
for ( i=1 to B ) No. of squares + = i*i.
เมื่อ L>B. จะเพิ่มช่องสี่เหลี่ยมเพิ่มเติม เมื่อ L=B+1 ( 1 คอลัมน์เพิ่มเติมจาก B ) จากนั้นสี่เหลี่ยมที่เพิ่มเข้ามาจะเป็น L + ( L-1) + ….+3+2+1 =L(L+1)/2
ดังนั้นสำหรับคอลัมน์ L-B เพิ่มเติม ช่องสี่เหลี่ยมที่เพิ่มเข้ามาจะเป็น ( L-B ) * (B)(B+1)/2
-
กำลังสองทั้งหมดจะเป็นกำลังสองใน BXB + (L-B) * (L)(L+1)/2.
-
คุณยังสามารถใช้สูตร B(B+1)(2B+1)/6 สำหรับชุดข้อมูล (1 + 4 + 9 +......BXB) ในขั้นตอนที่ 8
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล − L=4, B=2
ผลผลิต − นับสี่เหลี่ยมในรูปสี่เหลี่ยม − 11
คำอธิบาย − 8 สี่เหลี่ยมของ 1X1 และ 3 ของ 2X2
ป้อนข้อมูล − L=3, B=3
ผลผลิต − จำนวนช่องสี่เหลี่ยมในรูปสี่เหลี่ยมผืนผ้า − 14
คำอธิบาย − 9 สี่เหลี่ยมของ 1X1 , 4 ของ 2X2 และ 1 ของ 3X3
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้ความยาวและความกว้างของจำนวนเต็มสำหรับขนาดของสี่เหลี่ยมผืนผ้า
-
ฟังก์ชัน numofSquares(int l, int b) ใช้มิติข้อมูลและส่งกลับจำนวนสี่เหลี่ยมจัตุรัสในสี่เหลี่ยมขนาด lXb
-
สำหรับสี่เหลี่ยมที่ใหญ่ที่สุด bXb ใช้สำหรับลูปตั้งแต่ 1 ถึง b และเพิ่ม i*i แต่ละตัวลงในกำลังสอง
-
ตอนนี้ถ้า l>b. ช่องสี่เหลี่ยมที่เพิ่มใหม่จะเป็น (lb)(b)(b+1)/2 เพิ่มลงในช่องสี่เหลี่ยม
-
ส่งกลับสี่เหลี่ยมตามผลลัพธ์ที่ต้องการ
หมายเหตุ − รักษาความยาว>=ความกว้าง
ตัวอย่าง
#include<iostream> using namespace std; int numofSquares(int l, int b){ int squares=0; for(int i=1;i<=b;i++) //squares inside biggest square of size breadth X breadth{ squares += i*i; } squares+=(l-b)*b*(b+1)/2; return squares; } int main(){ int length = 5, breadth = 4; //keep length always >= breadth cout << "Count of squares is :"<< numofSquares(length,breadth); }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of squares is :40