C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++プログラムでN×3グリッドをペイントする方法の数


サイズがnx3のグリッドがあり、グリッドのすべてのセルを3色のうちの1つだけでペイントするとします。ここで使用される色は、赤、黄、緑です。

ここで、2つの隣接するセルが同じ色を持たないという制約があります。グリッドの行数はn個です。最後に、このグリッドをペイントする方法の数を見つける必要があります。答えは非常に大きい可能性があるため、10 ^ 9+7を法として返します。

したがって、入力が1のような場合、出力は12になります

C++プログラムでN×3グリッドをペイントする方法の数

これを解決するには、次の手順に従います-

  • m =10 ^ 9 + 7

  • 関数add()を定義します。これには、a、b、

    が必要です。
  • return((a mod m)+(b mod m))mod m

  • メインの方法から、次のようにします-

  • a123:=6、a121 =6

  • 初期化i:=2の場合、i − =nの場合、更新(iを1増やします)、実行-

    • b121:=add(3 * a121、2 * a123)

    • b123:=add(2 * a121、2 * a123)

    • a121:=b121

    • a123:=b123

  • add(a123、a121)を返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
const lli mod = 1e9 + 7;
class Solution {
public:
   lli add(lli a, lli b){
      return ((a % mod) + (b % mod)) % mod;
   }
   int numOfWays(int n){
      lli a123 = 6, a121 = 6;
      lli b123, b121;
      for (int i = 2; i <= n; i++) {
         b121 = add(3 * a121, 2 * a123);
         b123 = add(2 * a121, 2 * a123);
         a121 = b121;
         a123 = b123;
      }
      return add(a123, a121);
   }
};
main(){
   Solution ob;
   cout << (ob.numOfWays(3));
}

入力

3

出力

246

  1. C++でN×3グリッドをペイントする方法の数

    サイズnx3のグリッドがあり、グリッドの各セルを3色のうちの1つだけでペイントするとします。色は赤、黄、緑です。これで、隣接する2つのセルが同じ色にならないという制約があります。グリッドの行数はnです。このグリッドをペイントする方法の数を見つける必要があります。答えは非常に大きい可能性があるため、10 ^ 9+7を法として返します。 したがって、入力が1のような場合、出力は12になります これを解決するには、次の手順に従います- m =1 ^ 9 + 7 関数add()を定義します。これには、a、b、が必要です。 return((a mod m)+(b mod m

  2. 16進数から10進数のC++プログラム

    16進数を入力として指定すると、タスクは指定された16進数を10進数に変換することです。 コンピューターの16進数は16を底とし、10進数は10を底とし、0〜9の値で表されますが、16進数は0〜15から始まる数字で、10はA、11はB、12はC、 Dとして13、Eとして14、Fとして15。 16進数を10進数に変換するには、次の手順に従います- 余りから右から左に数字を抽出し、それを0から始まる累乗で乗算し、(桁数)–1まで1ずつ増やします。 16進数から2進数に変換する必要があるため、8進数の基数は16であるため、累乗の基数は16になります。 指定された入力の桁にベースとパワーを掛け