在 C 语言中绘制 N 幅画的方式,使得相邻的画作没有相同的颜色


在这个问题中,我们给定 N 幅画,还有 m 个颜色,我们可以用 m 个颜色绘制画作,我们需要找出可以绘制画作的方式,使得没有相同颜色的画作彼此相邻。

程序输出的值可能很大,处理这些值有点问题,因此我们将以标准模 109 +7 计算其答案。

找到方法数的公式是

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

描述问题的示例,这需要绘画数量 n 和颜色数量 m

输入

n = 5 ,m = 6

输出

3750

示例

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

输出

There are 3750 ways

更新于:09-Aug-2019

647 次查看

开启您的 职业 生涯

完成课程并获得认证

开始学习
广告