Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวนวิธีปูกระเบื้องพื้นขนาด n x m โดยใช้กระเบื้องขนาด 1 x m ใน C++


ให้ตัวเลขสองตัว n และ m แทนความยาวและความกว้างของพื้นห้อง เป้าหมายคือการนับจำนวนวิธีในการปูกระเบื้องพื้นโดยใช้กระเบื้องขนาด 1Xm

ตัวอย่าง

อินพุต

n=3 m=2

ผลลัพธ์

Count the number of ways to tile the floor of size n x m using 1 x m size tiles
are: 3

คำอธิบาย

ทางจะเป็นแบบเรียงต่อกัน 1x2 สามแผ่น ดังรูปด้านล่าง −

นับจำนวนวิธีปูกระเบื้องพื้นขนาด n x m โดยใช้กระเบื้องขนาด 1 x m ใน C++

อินพุต

n=3 m=3

ผลลัพธ์

Count the number of ways to tile the floor of size n x m using 1 x m size tiles
are: 2

คำอธิบาย

The ways will be three 1x3 tiles arranged vertically and horizontally. Only
two ways.

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

ในวิธีนี้เราตรวจสอบค่าของ n ถ้า n น้อยกว่า m และมีค่า 1 ก็จะมีแผ่นเดียวที่จะวางให้ทั่วพื้นขนาด 1Xm

ถ้า n เท่ากับ m จะมี 2 วิธี คือ การวาง n 1xm ไทล์ในแนวตั้งและแนวนอนทั้งหมด ถ้า n มากกว่า m เราจะคำนวณวิธีโดยใช้วิธีก่อนหน้า −ways[n−1]+ways[m−1]

  • ใช้จำนวนเต็ม m และ n สำหรับขนาดของพื้นและกระเบื้อง

  • ฟังก์ชัน way_tile_floor(int N, int M) ใช้ขนาดและส่งคืนจำนวนวิธีในการปูกระเบื้องพื้นขนาด n x m โดยใช้ไทล์ขนาด 1 x ม.

  • ใช้อาร์เรย์ arr[ ] ของความยาว N+1 เพื่อเก็บจำนวนไทล์สำหรับดัชนี i=ค่าปัจจุบันของ N

  • สำหรับกระเบื้อง arr[0] จะเป็น 0 ดังนั้น arr[0]=0.

  • Traverse arr[] ใช้สำหรับการวนซ้ำจาก i=1 ถึง i=N สำหรับแต่ละ arr[i] ถ้า i>M คำนวณการนับโดยใช้ค่าก่อนหน้า arr[i]=arr[i − 1] + arr[i − M].

  • ในกรณีที่ i=1 และ หรือ i

  • ในกรณี i=M ให้ตั้งค่า arr[i]=2.

  • ที่ส่วนท้ายของลูป for arr[N] จะนับวิธีการจัดเรียงไทล์

  • คืนค่า arr[N] เป็นผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int ways_tile_floor(int N, int M){
   int arr[N + 1];
   arr[0] = 0;
   for (int i = 1; i <= N; i++){
      if (i > M){
         arr[i] = arr[i − 1] + arr[i − M];
      }
      else if (i < M || i == 1){
         arr[i] = 1;
      } else {
         arr[i] = 2;
      }
   }
   return arr[N];
}
int main(){
   int n = 3, m = 2;
   cout<<"Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: "<<ways_tile_floor(n, m);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: 3