用C++實現N幅畫作的塗色方案,相鄰畫作顏色不同


在這個問題中,我們給定兩個整數 n 和 m,其中 n 是畫作的數量,m 是可用顏色的數量。我們的任務是編寫一個程式,找到可以對畫作進行塗色的總方法數,條件是相鄰的畫作不能有相同的顏色。

讓我們來看一個例子來理解這個問題:

輸入

n = 3, m =3

輸出

12

解釋

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

為了解決這個問題,我們可以用 m 種顏色塗所有 n 幅畫作,那麼下一幅畫作可以用 n-1 種顏色來塗(排除最後塗的畫作的顏色)。因此,總方法數為:

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

展示我們解決方案實現的程式:

示例

 線上演示

#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;
}

輸出

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

更新於:2020年7月17日

170 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告