Другие языки программирования и технологии

Задача на С. Дана последовательность из m единиц и нулей

Дана последовательность из m единиц и нулей. Рассмотреть отрезки этой последовательности (подпоследовательности идущих подряд чисел), состоящие
из одних нулей. Получить наименьшую из длин рассматриваемых отрезков.

объясните, как ее сделать?
Vasily Zavgorodnii
Vasily Zavgorodnii
195
Как то так.
int i,ind,indmin,cnt,cntmin;
bool zer;

zer=false;
cntmin=m+1;
for (i=0;i<m;i++){
if (a[i]==0){
if (zer){
cnt++;
} else {
zer=true;
ind=i;
cnt=0;
}
} else {
if (zer){
if (cnt<cntmin){
cntmin=cnt;
indmin=ind;
}
zer=false;
}
}
АТ
Андрей Тырля
48 987
Лучший ответ
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

#define END_SEARCH -1
#define END_LINE 0

char* length(char* seq, char* index, char value, int* min_len);
int min_length(char* seq, char value);

int main(void)
{
char sequence[] = "1000110000100111";
char desired_value = '0';

int ml = min_length(sequence, desired_value);

if (ml != END_SEARCH)
{
printf("Min Length: %d\n", ml);
}
else
{
printf("Not found!\n");
}

getchar();
return 0;
}

char* length(char* seq, char* index, char value, int* min_len)
{
char* cur = index;
int count = 0;

while (*cur != END_LINE)
{
if (*cur == value)
{
++count;
}
else if (count > 0)
{
break;
}

++cur;
}

if (count < *min_len)
{
*min_len = count;
}

return cur;
}

int min_length(char* seq, char value)
{
int size = strlen(seq);
int min_len = END_SEARCH;

if (0 != size)
{
_Bool exist = false;
char* cur = seq;

while (*cur != END_LINE)
{
if (*cur == value)
{
exist = true;
break;
}
++cur;
}

if (exist)
{
int len;
min_len = size;

do
{
len = min_len;
cur = length(seq, cur, value, &len);

if (len > 0 && len < min_len)
{
min_len = len;
}

if (*cur != END_LINE)
{
++cur;
}
}
while (*cur!= END_LINE);
}
}

return min_len;
}

Похожие вопросы