我是编程初学者。我的问题是如何计算输入数组中的数字序列?例如:
input array = [0,0,1,1,1,1,1,1,0,1,0,1,1,1]
output integer = 3 (count one-sequences)
如何在输入数组中计算第一个和最后一个索引的数字序列?例如:
input array = [0,0,1,1,1,1,1,1,0,1,0,1,1,1]
output array = [3-8,10-10,12-14] (one first and last place in a sequence)
我试图在C中使用数组来解决这个问题。谢谢!
答案 0 :(得分:0)
您的任务是一个很好的练习,让您熟悉C中使用的0-based
数组索引,迭代数组,并在输出需要时将数组索引调整为1-based
。
将前两个一起放在C中的0-based
数组中,并迭代元素,首先必须确定数组中有多少个元素。这会给新的C程序员带来麻烦。原因是一般数组(与以null结尾的字符串相对),您必须知道数组中元素的数量,或者确定范围内的元素数声明数组的位置。
这是什么意思?这意味着,唯一可以使用sizeof
运算符来确定数组的大小在同一范围内(即在同一代码块{...}
内,其中声明数组。如果数组传递给一个函数,传递数组的参数将被转换(你可能会将它称为衰减)转换为指针。当发生这种情况时,{{1}运算符只返回sizeof
的大小(x86_64上通常为8个字节,x86上为4个字节),而不是数组的大小。
所以现在你知道你任务的第一部分了。 (1)声明数组;并且(2)保存数组的大小以用于迭代元素。第一个可以使用a pointer
,第二个可以使用int array[] = {0,0,1,1,1,1,1,1,0,1,0,1,1,1};
您的下一个工作是迭代数组中的每个元素,并测试它是sizeof array;
还是'0'
并做出适当的响应。要迭代数组中的每个元素(而不是字符串),您通常会使用'1'
循环与索引变量(下面的for
)相结合,这将允许您访问每个元素。阵列。你可能有类似的东西:
'i'
(注意:您也可以size_t i = 0;
...
for (i = 0; i< sizeof array; i++) {
... /* elements accessed as array[i] */
}
使用int
作为'i'
的类型,但是对于您选择的类型,您通常会问'i'
这里是否为负面?如果没有,选择只处理正数的类型将有助于编译器在您的代码中稍后滥用该变量时发出警告)
要构建完整的逻辑,您需要测试从'0'
到'1'
的所有更改,您可能必须使用嵌套的if ... else ...
语句。 (您可能必须检查您是否专门作为测试逻辑的一部分处理array[0]
)这里有2个任务。 (1)确定最后一个元素是'0'
还是当前元素'1'
,然后更新您的sequence_count++;
和(2)测试当前元素是否为'1'
,然后将调整后的索引存储在第二个数组中,并更新第二个数组的计数或索引,以便跟踪存储下一个数据的位置< em>调整后的指数值。我会让你研究测试逻辑,如果你遇到问题会有所帮助。
最后,您只需打印出最终的sequence_count
,然后迭代您的第二个数组(每次array
'1'
{{1>}存储调整后的索引值 1}}。
这将帮助您入门。编辑您的问题并在遇到困难时添加当前代码,人们可以进一步提供帮助。