c - 数列长度、数组中元素的第一个和最后一个索引

标签 c arrays algorithm

我是编程初学者。我的问题是如何计算输入数组中的数字序列?例如:

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-based C中使用的数组索引,迭代数组,并将数组索引调整为1-based当输出需要时。

将前两个放在一起,0-based C 中的数组,并迭代元素,您必须首先确定数组中有多少个元素。这给新的 C 程序员带来了麻烦。原因是对于一般数组(与空终止字符串相反),您必须知道数组中的元素数量,或者确定范围内的元素数量 em> 声明数组的位置。

这是什么意思?这意味着,您唯一可以使用sizeof的时间确定数组大小的运算符位于同一范围内(即在声明数组的同一代码块 {...} 内)。如果将数组传递给函数,则传递该数组的参数数组被转换(您可能会看到它被称为衰减)为指针。当发生这种情况时, sizeof 运算符仅返回 a pointer 的大小(在 x86_64 上通常为 8 字节,在 x86_64 上通常为 8 字节,在 x86_64 上通常为 8 字节) -x86 上的字节),而不是数组的大小。

现在您知道任务的第一部分了。 (1) 声明数组; (2) 保存用于迭代元素的数组大小。您可以使用 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' ,然后将调整后的索引存储在第二个数组中,并更新第二个数组的计数或索引,以便您可以跟踪存储下一个调整后的索引值的位置。我会让您研究测试逻辑,并在您遇到困难时提供帮助。

最后,您只需打印出最终的 sequence_count然后迭代第二个数组(在其中存储每次 array'1'调整后的索引值

这将帮助您开始。当您遇到困难时,编辑您的问题并添加您当前的代码,人们可以提供进一步的帮助。

关于c - 数列长度、数组中元素的第一个和最后一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33525155/

相关文章:

algorithm - 寻找最小化节点深度总和的生成树

algorithm - 如何设计时间复杂度为 O(n log n) 的搜索算法?

arrays - 计算 Firebase (Swift) 的结果数

javascript - "MapQuest"编码挑战 - 消除相互抵消的 "Directions"

c - linux 上的 mmap 错误(使用其他东西)

c - 如何避免 C 中字符串递归函数中的段错误?

ios - 找不到接受提供的参数的重载 'init'

algorithm - Big-O for While 循环

c - 使用 "fgets"时如何仅获取部分用户输入并丢弃其他字符?

c - Ubuntu/Xfce 禁用特定应用程序的全局快捷方式