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
-
C++で3本の直線上の点集合から形成できる三角形の個数を求める方法
問題概要3本の直線上にそれぞれ複数の点が配置されており、これらの点の中から3点を選んで三角形を作るとき、全部でいくつの三角形が作れるかを求めるのが本記事のテーマです。まずは具体例を見てみましょう。入力:m = 3, n = 4, k = 5出力:205入力:m = 2, n = 2, k = 1出力:10この問題は、組み合わせ(コンビネーション)の概念を活用することで、専用の数式を導出し、効率的に解くことが可能です。解法へのアプローチ本アプローチでは、組み合わせ論を適用して数式を導きます。この数式を用いることで、答えを直接計算できます。考え方のポイント3点が三角形を成すための条件は「その3点が
-
C++で五胞体数(ペンタトープ数)を求める方法
五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の