ภารกิจคือการคำนวณจำนวนสูงสุดของชิ้นส่วนสี่เหลี่ยมจัตุรัสหรือสี่เหลี่ยมผืนผ้าที่มีขนาดเท่ากัน ที่สามารถรับได้โดยการตัดชิ้นสี่เหลี่ยมที่กำหนดในจำนวนครั้ง N ของการตัดในแนวนอนหรือแนวตั้งพี>
ตอนนี้มาทำความเข้าใจสิ่งที่เราต้องทำโดยใช้ตัวอย่าง -
ป้อนข้อมูล − N=8
ผลผลิต − 25
คำอธิบาย − เมื่อ N=8 จำนวนการตัดแนวตั้ง =4 และจำนวนการตัดแนวนอน =4
จำนวนชิ้นทั้งหมด =25
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
ป้อนข้อมูล − 7
ผลลัพธ์ − 20
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
แนวทางที่ใช้ในโปรแกรมด้านล่างนี้
-
ถ้า N คือจำนวนการตัด และเราต้องเพิ่มผลลัพธ์ของชิ้นงาน จะต้องทำให้จำนวนการตัดในแนวนอนและแนวตั้งเท่ากัน
ถ้า N เป็นเลขคู่ การตัดแนวนอนและแนวตั้งเท่ากัน มิฉะนั้น ถ้า N เป็นเลขคี่ การตัดแนวนอนจะเป็น 1 มากกว่าการตัดแนวตั้ง หรือในทางกลับกัน
ดังนั้น จำนวนการตัดแนวนอน =N/2 และการตัดแนวตั้ง =N-H.
-
ในฟังก์ชัน MaxPieces() เริ่มต้นตัวแปร H =N/2 ของประเภท int เพื่อเก็บจำนวนการตัดในแนวนอน
-
เริ่มต้นตัวแปรอื่น V=N-H ของประเภท int เพื่อเก็บจำนวนการตัดแนวตั้ง
-
จำนวนชิ้นสุดท้าย =(แถวแนวนอน)*(แถวแนวตั้ง) =(H+1)*(V+1)
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int MaxPieces(int N){ //H is the number of horizontal cuts int H = N / 2; //V is the number of vertical cuts int V = N-H; // maximum number of pieces = (H+1)*(V+1) return ((H + 1) * (V + 1)); } //Main function int main(){ //Number of cuts int N = 7; cout << "Max pieces = "<<MaxPieces(N); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -
20