绘制N幅画的方式,以使相邻的画在C ++中没有相同的颜色

在这个问题中,我们给了两个整数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<<"给给定绘画上色的方法有: "<<colorPainting(n, m);
   return 0;
}

输出结果

给给定绘画上色的方法有: 9072