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

特定のシーケンスで個別の要素を見つけるためのC++プログラム


3つの整数n、x、y、およびzが与えられているとします。シーケンスの最初の項目が(x modulo 2 31 である、指定された整数からシーケンスを作成する必要があります。 )。最初の要素以外の、シーケンスa iの他の要素 =(a (i-1) * y + z)モジュロ2 31 、ここで、1≤i≤n-1。作成したシーケンス内の個別の整数の数を調べる必要があります。

したがって、入力がn =5、x =1、y =2、z =1の場合、出力は5になります。

一意の値は{1、3、7、15、31}です。したがって、答えは5です。

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

  • MOD:=2 ^ 31
  • アレイの温度を定義する
  • 配列の温度をMODの値に変更します
  • p:=x mod MOD
  • temp [p]:=true
  • ans:=1
  • iを初期化する場合:=1、i
  • p:=((p * y)+ z)mod MOD
  • temp [p]がtrueの場合、-
    • ループから抜け出す
  • ansを1増やします
  • temp [p]:=true
  • 回答を返す
  • 理解を深めるために、次の実装を見てみましょう-

    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const long long MOD = 2147483648;
    
    int solve(int n, long long x, long long y, long long z) {
       vector<bool> temp;
       temp.resize(MOD);
       long long p = x % MOD;
          temp[p] = true;
          int ans = 1;
          for (int i = 1; i < n; ++i) {
             p = ((p * y) + z) % MOD;
             if (temp[p])
                break;
             ++ans;
             temp[p] = true;
       }
       return ans;
    }
    
    int main() {
    cout<< solve(5, 1, 2, 1) <<endl;
    return 0;
    }

    入力

    5, 1, 2, 1

    出力

    5

    1. グリッド内の照らされたセルの数を見つけるためのC++プログラム

      次元h*wのグリッドが与えられていると仮定します。グリッド内のセルには、球根または障害物のいずれかを含めることができます。電球のセルはそれ自体とその右、左、上、下のセルを照らし、障害物のセルが光を遮らない限り、光はセルを通して輝くことができます。障害物セルは照明できず、電球セルからの光が他のセルに到達するのを防ぎます。したがって、配列「bulb」内のグリッド内の電球セルの位置と配列「obstacles」内の障害物セルの位置を考えると、照らされているグリッド内のセルの総数を見つける必要があります。 したがって、入力がh =4、w =4、bulb ={{1、1}、{2、2}、{3、3}}、障害物

    2. 与えられたグラフのブリッジエッジの数を見つけるためのC++プログラム

      n個の頂点とm個のエッジを含む重み付けされていない無向グラフが与えられたとします。グラフのブリッジエッジは、グラフを削除するとグラフが切断されるエッジです。与えられたグラフでそのようなグラフの数を見つける必要があります。グラフには、平行なエッジや自己ループは含まれていません。 したがって、入力がn =5、m =6、edges ={{1、2}、{1、3}、{2、3}、{2、4}、{2、5}、{3 、5}}の場合、出力は1になります。 グラフには、{2、4}のブリッジエッジが1つだけ含まれています。 これを解決するには、次の手順に従います- mSize := 100 Define an