Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中,计数序列为1';s_C_Algorithm - Fatal编程技术网

在C中,计数序列为1';s

在C中,计数序列为1';s,c,algorithm,C,Algorithm,给定一个二进制数,如“10000111111110000001”,其中每个位都放置在一个数组中,因此该数组如下所示: [1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1] 我想找到任何1序列的起始索引和结束索引 所需输出(从右向左读取): -起始索引=0 -结束索引=0 (获取此数字并相应地采取行动) 然后: -起始指数=7 -期末指数=15 (获取此数字并相应地采取行动) 最后发生- -起始指数=20 -期末指数=20 (获取此数字并相应地采取行动) 如何在C语言

给定一个二进制数,如“10000111111110000001”,其中每个位都放置在一个数组中,因此该数组如下所示: [1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,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;
 }
for(int i=0;i(startP+1)){
//做点什么
}
endP++;
startP=endP;
}
*计数器=阵列的len

*endP和startP int,初始化


*bitArray按所述设置数组。

我不知道您的代码应该做什么,但如果您只想打印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);
    }
}
#包括
#包括
int main()
{
char-msg[64];
int位数组[]={1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1};
int inSet=0;
int启动;
内端;
对于(int i=0;i
您自己尝试过什么吗?是的,附加了代码,代码有什么问题?它打印什么?另外,您的代码不完整。修复一个可能需要在
for
循环后面的语句,该循环设置
end
if
inSet==1
。此外,在循环的每次迭代中,您都会不必要地测试
bitArray[i]
两次。使用
else
。我需要在过程中比较起始索引和结束索引,而不是打印它们,而是在迭代中检查起始索引是否等于结束,或者结束是否大于开始索引,根据这一点,做一些其他的事情。好的,你现在已经有了所有的代码来做了,您可以插入所需的任何语句,而不是printf语句。