Алгоритм линейного поиска (ошибка)

#c #algorithm #data-structures

#c #алгоритм #структуры данных

Вопрос:

Здесь мне нужна помощь, я хочу исправить этот код, чтобы он печатал (цель найдена по адресу:) только в том случае, если он нашел цель, вместо того, чтобы печатать слово, даже если оно не нашло цель

например, если пользователь хочет найти число 3 в массиве {1, 2, 3, 4, 3} он должен напечатать
, что цель найдена по индексу: 2, 4

но если пользователь хочет, чтобы exmaple нашел 2 в массиве {1, 3, 4, 5}, он должен напечатать
Not Found

 #include <stdio.h>


void search(int array[], int n, int k);

#define MAX 100

int main(void)
{
    int array[MAX];
    int n;
    int k;

    scanf("%d", amp;n);
    scanf("%d", amp;k);

    for (int i = 0; i < n; i  )
    {
        scanf("%d", amp;array[i]);
    }

    printf("Initial array:n");

    for (int i = 0; i < n; i  )
    {
        printf("%d ", array[i]);
    }
    printf("n");

    printf("Target element: %dn", k);

    printf("Target is found at: ");
    search(array, n, k);

    //(result == -1) ? printf("No targetn") : printf("Target is found at: %dn", result);
}

void search(int array[], int n, int k)
{
    for (int i = 0; i < n; i  )
        if (k == array[i])
            printf("%d ", i);
    printf("n");
}
 

Комментарии:

1. В чем разница между тем, что вы хотите, чтобы эта программа делала, и тем, что она делает в настоящее время?

Ответ №1:

удалите строку, в которой вы печатаете это сообщение:

 printf("Target is found at: ");
 

и если вы найдете значение…

 printf("Target is found at: %dn", i);
 

вы также можете добавить оператор return внутри if и сообщение о том, что значение не было найдено за пределами for:

  void search(int array[], int n, int k)
 {
    for (int i = 0; i < n; i  )
        if (k == array[i])
        {
           printf("Target is found at: %dn", i);
           return;
         }
     printf("value not foundn");
 }
 

Комментарии:

1. Это не приведет к получению желаемого «Цель найдена по индексу: 2, 4», упомянутого в вопросе.