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

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. 連続する「1」を含まないバイナリ文字列の数を数えるPythonプログラム

    この記事では、「連続する1が存在しないバイナリ文字列の総数を求める」という問題の解き方について、Pythonでの実装例を交えながら詳しく解説します。 問題文 問題: 正の整数 N が与えられます。このとき、長さ N のバイナリ文字列(0と1のみで構成される文字列)のうち、連続する「1」が一切含まれないものの総数を求めてください。 例えば N = 3 の場合、有効な文字列は「000」「001」「010」「100」「101」の5つとなり、「011」「110」「111」は連続する1を含むため除外されます。 アプローチ:動的計画法 この問題は動的計画法(DP)を使うことで効率的に解けます。各桁の状態を

  2. Pythonでアームストロング数を判定するプログラムの書き方

    この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す