用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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP