首页 > 解决方案 > 在 C 中 - 计数 1 的序列

问题描述

给定一个二进制数,例如“100001111111110000001”,其中每个位都放在一个数组中,因此数组如下所示:[1,0,0,0,0,1,1,1,1,1,1,1 ,1,1,0,0,0,0,0,0,1]

我想找到任何 1 序列的起始索引和结束索引。

所需的输出(从右到左读取):

-起始索引 = 0

-结束索引 = 0

(得到这个数字并做相应的事情)

然后:

-起始索引 = 7

-结束索引 = 15

(得到这个数字并做相应的事情)

最后一次出现 -

-起始索引 = 20

-结束索引 = 20

(得到这个数字并做相应的事情)

如何在 C 中完成所需的输出?

附上我试过的代码:

   for (int i = 0; i< counter; i++) {
    if (bitArray[i] == 0) {
      while (bitArray[i] == 0) {
        startP++;
        endP++;
        i++;
      }
    }
    if(bitArray[i] == 1) {
        startP++;
        while(bitArray[i+1]==1) {
          endP++;
          i++;
        }
    }
    if (endP == startP) {
        //do something
    } else if (endP == (startP + 1)) {
    //do something
    } else if (endP > (startP + 1)) {
    // do something
    }
    endP++;
    startP = endP;
 }

*counter = 数组的长度

*endP 和 startP int,初始化。

*bitArray 描述的数组。

标签: calgorithm

解决方案


我不确切知道您的代码应该做什么,但是如果您只想打印 1 集的开始和结束索引,我会稍微更改您的代码来这样做:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char msg[64];

    int bitArray[] = {1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1};
    int inSet = 0;
    int start;
    int end;

    for (int i = 0; i < sizeof(bitArray); i++) {
        if (bitArray[i] == 1 && inSet == 0) {
            inSet = 1;
            start = i;
        }
        else if(bitArray[i] == 0 && inSet == 1) {
            inSet = 0;
            end = i - 1;
            snprintf(msg, sizeof(msg), "-starting index = %d\n-ending index = %d\n", start, end);
            printf(msg);
        }
    }
    if(inSet == 1)
    {
        end = sizeof(bitArray) - 1;
        snprintf(msg, sizeof(msg), "-starting index = %d\n-ending index = %d\n", start, end);
        printf(msg);
    }
}

推荐阅读