在行号出现时产生第一个索引“ 3”的函数

时间:2018-10-02 05:47:50

标签: c function loops for-loop if-statement

我想创建一个函数,该函数接受数组的输入及其值的数量。在这种情况下,该函数应遍历该数组并在其后立即看到“连续3”(例如{1 2 3 4 5 5 5 6 7 8 8))。该函数应打印索引为第一个5.我是编码的新手,所以我觉得很难开始。我已经尝试过,但不知道如何进行。

int NewFunction(int array, int numValues){
int i;
int j;
for(i=0;i<numValues;i++){
for(j=i+1;j<numValues;j++){
if(

3 个答案:

答案 0 :(得分:1)

首先,您可能想使用比NewFunction更具描述性的名称。另外,该数组不应为int类型,您可能正在寻找指向int的指针。

此外,您不需要像这样的嵌套循环:

for(i=0;i<numValues;i++){
for(j=i+1;j<numValues;j++){

想象一下,手动执行此操作,得到大约1000个数字的列表,试图连续查找三个。您多久浏览一次清单?最多一次,对吧?您不会遍历该列表一千次,因此您的算法也不会遍历该列表,因此这里不需要嵌套循环。

您正在寻找的东西是这样的:

int threeInARow(int* array, int numValues) {
    int count = 1;  // how many numbers in a row were found
    int current = array[0]; // the number that we're looking for
    int i = 1;
    for (; i < numValues; i++) {
        if (array[i] == current) {
            if (++count == 3) return i - 2;
        }
        else { // a different number is found: start over
            count = 1;
            current = array[i];
        }
    }
    return -1;  // return a value indicating that no result was found
}

答案 1 :(得分:0)

从变量开始:您在哪里第一次看到的最后一个值。我们将其称为last,并将其初始化为0。然后将index从1迭代到数组的长度。如果indexlast之差为3,则返回last作为重复值的索引。如果不是,请检查index是否长。如果是这样,则搜索失败。否则,如果当前索引处的值与last处的值不同,则将last设置为当前索引。

答案 2 :(得分:0)

另一种方法。

#include <stdio.h>
#define ELEMENT 14

int three_in_a_row(int arr[], int n) {

  int i, index, count = 0, max = 0;
  i = -1;

  do {
    i = i + 1;
    if (arr[i] == arr[i + 1]) {
      index = i-1; //because we want the first occurrence
      count++;
      if (count > max) max = count; // 3 elements in a row means that max must be 3-1 
    } else
      count = 0; 
  } while (i < n - 2 && max != 3 - 1);

  return (max == 2 ? index : -1);// -1 indicates no result
}

int main(void) {

  int array[] = {1,10,1,4,4,8,8,8,7,8,8,9,9,2}, index3;
  index3 = three_in_a_row(array, ELEMENT);
  printf("%d\n", index3);

  return (0);
}