在C中-1的计数序列

时间:2019-12-07 18:10:28

标签: c algorithm

给出一个二进制数,例如“ 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 =数组的len

* endP和startP int,已嵌入。

* bitArray如所描述的那样。

1 个答案:

答案 0 :(得分:1)

我不确定您的代码应该做什么,但是如果您只想打印一组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);
    }
}