C#で2進数にK個の連続した1が存在するかを判定する方法
2進数にK個の連続した1が含まれるかどうかの判定
2進数の中に連続した「1」が何個並んでいるかを調べるには、配列内の「0」と「1」を先頭から順番に走査し、連続する1の数をカウントしていく方法が有効です。
基本的な考え方
まず、0と1(falseとtrue)を表すbool型の配列を用意します。
bool[] myArr = {false, true, false, false, false, true, true, true};要素が0(false)の場合は、それまでの連続カウントをリセットします。
if (myArr[i] == false) count = 0;
要素が1(true)の場合は、カウントを1つ増やし、これまでの最大値と比較して結果を更新します。Math.Max()メソッドは2つの値のうち大きい方を返すため、最大連続数を簡単に求められます。
count++; res = Math.Max(res, count);
サンプルコード
以下は、2進数にK個の連続した1があるかどうかを確認するC#プログラムの完全な例です。
using System;
class MyApplication {
static int count(bool []myArr, int num) {
int myCount = 0, res = 0;
for (int i = 0; i < num; i++) {
if (myArr[i] == false)
myCount = 0;
else {
myCount++;
res = Math.Max(res, myCount);
}
}
return res;
}
public static void Main() {
bool []myArr = {false, true, false, false, false, true, true, true};
int num = myArr.Length;
Console.Write("Consecutive 1's = "+count(myArr, num));
}
}実行結果
このプログラムを実行すると、配列の末尾に連続した3つの「1」(true)が存在するため、最大連続数として3が出力されます。
Consecutive 1's = 3
-
連続する「1」を含まないバイナリ文字列の数を数えるPythonプログラム
この記事では、「連続する1が存在しないバイナリ文字列の総数を求める」という問題の解き方について、Pythonでの実装例を交えながら詳しく解説します。 問題文 問題: 正の整数 N が与えられます。このとき、長さ N のバイナリ文字列(0と1のみで構成される文字列)のうち、連続する「1」が一切含まれないものの総数を求めてください。 例えば N = 3 の場合、有効な文字列は「000」「001」「010」「100」「101」の5つとなり、「011」「110」「111」は連続する1を含むため除外されます。 アプローチ:動的計画法 この問題は動的計画法(DP)を使うことで効率的に解けます。各桁の状態を
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す