Computer >> Máy Tính >  >> Lập trình >> C ++

Cách vẽ N bức tranh sao cho các bức tranh liền kề không có cùng màu trong C ++

Trong bài toán này, chúng ta được cho hai số nguyên n và m, trong đó n là số bức tranh và m là số màu có sẵn. Nhiệm vụ của chúng tôi là tạo ra một chương trình sẽ tìm tổng số cách mà chúng tôi có thể vẽ các bức tranh sao cho không có bức tranh nào liên tiếp có cùng màu.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

n = 3, m =3

Đầu ra

12

Giải thích

P1 P2 P3
C1 C2 C3
C1 C3 C2
C1 C2 C1
C1 C3 C1
C2 C1 C2
C2 C3 C2
C2 C1 C3
C2 C3 C1
C3 C1 C3
C3 C2 C3
C3 C1 C2
C3 C2 C1

Để giải quyết vấn đề này, chúng ta có thể vẽ tất cả n bức tranh với m màu, bây giờ các bức tranh tiếp theo có thể được vẽ bằng n-1 màu không kể màu đã dùng để vẽ bức tranh cuối cùng. Vì vậy, tổng số cách là,

n*(m-1)(n-1)

Chương trình cho thấy việc triển khai giải pháp của chúng tôi,

Ví dụ

#include <iostream>
#define modd 1000000007
using namespace std;
unsigned long calcPower(unsigned long base, unsigned long power, unsigned long p){
   unsigned long result = 1;
   base = base % p;
   while (power > 0) {
      if (power & 1)
         result = (result * base) % p;
      power = power >> 1;
      base = (base * base) % p;
   }
   return result;
}
int colorPainting(int n, int m){
   return calcPower(m - 1, n - 1, modd) * m % modd;
}
int main(){
   int n = 5, m = 7;
   cout<<"The number of ways to color the given paintings is : "<<colorPainting(n, m);
   return 0;
}

Đầu ra

The number of ways to color the given paintings is : 9072