c - 在 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 描述的数组。
解决方案
我不确切知道您的代码应该做什么,但是如果您只想打印 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);
}
}
推荐阅读
- python - 将随机文件样本从一个文件夹移动到另一个文件夹
- php - 亚马逊产品 API 错误 429:如何优化批量请求的性能和可靠性?
- machine-learning - 在急切执行中应用梯度后的Tensorflow 2二阶导数
- mongodb - MongoDB:: MultiKey 字段的高效复合索引与排序
- c++ - Windows API 定时器队列和线程安全问题
- c - 快点?许多小 I/O 还是一个大 I/O?
- specflow - 无法在代码中获得正确的 SpecFlow+ 目标值
- java - 重载子类的构造函数
- css - 如何用图像填充形状?
- php - Laravel 5.8通过mailgun发送邮件不起作用