ภารกิจคือการคำนวณจำนวนสูงสุดของชิ้นส่วนสี่เหลี่ยมจัตุรัสหรือสี่เหลี่ยมผืนผ้าที่มีขนาดเท่ากัน ที่สามารถรับได้โดยการตัดชิ้นสี่เหลี่ยมที่กำหนดในจำนวนครั้ง 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