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

C++でN個の磁石から形成される磁石グループの数を求める方法

数字 1 は正極(N極)を、0 は負極(S極)を表します。

各磁石は 10 または 01 のように2つの極を持っています。互いに引き合う磁石同士でグループが形成され、異なる極が向かい合っている磁石は同じグループに属します。

ここでは、N個の磁石が与えられます。あなたの課題は、これらの磁石から何個のグループが形成されるかを求めることです。

隣り合う2つの磁石が異なる場合、その場所で新しいグループが始まります。このとき、グループのカウントを1つ増やしていきます。

具体例を見てみましょう。

入力

magnets = ["10", "01", "01", "01", "10", "01"]

出力

4

隣り合う磁石が異なるたびに新しいグループが形成されるため、この配列では「10」と「01」の並びが切り替わる箇所が3つあります。最初のグループを1と数えると、グループの総数は4となります。

アルゴリズム

  • 磁石の配列を初期化します。
  • ペアとして扱うため、カウントを1で初期化します。
  • インデックス1から配列の末尾まで繰り返すループを作成します。
  • 現在の磁石が直前の磁石と異なる場合は、カウントを1増やします。
  • 最後にカウントを返します。

実装

以下は、上記のアルゴリズムをC++で実装したコードです。

#include <bits/stdc++.h>
using namespace std;
int getMangetGroupsCount(string magnets[], int n) {
    int count = 1;
    for (int i = 1; i < n; i++) {
        if (magnets[i] != magnets[i - 1]) {
            count++;
        }
    }
    return count;
}
int main() {
    string magnets[] = { "10", "01", "01", "01", "10", "01" };
    int n = 6;
    cout << getMangetGroupsCount(magnets, n) << endl;
    return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

4
  1. C++で3本の直線上の点集合から形成できる三角形の個数を求める方法

    問題概要3本の直線上にそれぞれ複数の点が配置されており、これらの点の中から3点を選んで三角形を作るとき、全部でいくつの三角形が作れるかを求めるのが本記事のテーマです。まずは具体例を見てみましょう。入力:m = 3, n = 4, k = 5出力:205入力:m = 2, n = 2, k = 1出力:10この問題は、組み合わせ(コンビネーション)の概念を活用することで、専用の数式を導出し、効率的に解くことが可能です。解法へのアプローチ本アプローチでは、組み合わせ論を適用して数式を導きます。この数式を用いることで、答えを直接計算できます。考え方のポイント3点が三角形を成すための条件は「その3点が

  2. C++で五胞体数(ペンタトープ数)を求める方法

    五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の