用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
廣告