Computer >> Máy Tính >  >> Lập trì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ó màu giống nhau trong lập trình C

Trong bài toán này, bạn được đưa cho N bức tranh và chúng ta có m màu có thể tạo thành bức tranh và chúng ta cần tìm số cách để chúng ta có thể vẽ bức tranh sao cho không bức tranh nào cùng màu với nhau.

Đầu ra của chương trình có thể có các giá trị rất lớn và việc chuyển các giá trị này là một vấn đề nhỏ, vì vậy chúng tôi sẽ tính toán câu trả lời của nó trong mô-đun chuẩn 10 9 +7.

Công thức để tìm số cách là:

Ways = n*(m-1)(n-1)

Ví dụ để mô tả vấn đề, điều này sẽ cần số bức tranh n và số màu m:

Đầu vào

n = 5 ,m = 6

Đầu ra

3750

Ví dụ

#include <iostream>
#include<math.h>
#define modd 1000000007
using namespace std;
unsigned long find(unsigned long x,
unsigned long y, unsigned long p) {
   unsigned long res = 1;
   x = x % p;
   while (y > 0) {
      if (y & 1)
         res = (res * x) % p;
      y = y >> 1;
      x = (x * x) % p;
   }
   return res;
}
int ways(int n, int m) {
   return find(m - 1, n - 1, modd) * m % modd;
}
int main() {
   int n = 5, m = 6;
   cout<<"There are"<<ways(n, m)<<"ways";
   return 0;
}

Đầu ra

There are 3750 ways