Как я могу найти максимальное значение в массиве, используя случаи? - PullRequest
0 голосов
/ 29 апреля 2020

Этот код работает.

#include <stdio.h>    
#include <stdlib.h>    
#define MAX 500

void hof (int *arr, int n);
int fm (int arr[], int index, int maximum);

int main (void) {
  int i;
  int n;
  int arr[MAX];
  //int size = sizeof (arr[MAX]) / sizeof (arr[0]);

  printf("How many elements to print: ");
  scanf("%d", &n);

  for (i=0; i < MAX; i++) {
    arr[i] = 0;
  }
  //int maximum = arr[0];
  hof (&arr[0], n);

  int maximum = fm (arr, 0, n);
  printf ("the largest number of sequence is %d", maximum);
}

void hof (int *arr, int n) {
  int i;

  for (i = 0; i < n; i++) {
    if (i == 0 || i == 1 )
      arr[i] = 1;
    else
      arr[i] = arr[i - arr[i-1]] + arr[i - arr[i - 2]];
  }

  for (i = 0; i < n; i++)
    printf ("Q(%d)->%d\n", i + 1, arr[i]);

}

int fm(int arr[], int index, int maximum) {
  int max;
  if (index > maximum - 1) {
    if(arr[index] <= arr[index + 1])
      return arr[index];
    else
      return arr[index + 1];
  }
  max=fm(arr, index + 1, maximum);
  if (arr[index] >= max)
    return arr[index];
  else 
    return max;
}

Я написал код, который обнаружил последовательность q Hofstadter и дал максимальное значение. Однако в случае 2 не отображается максимальное значение после случая 1, когда я его редактирую следующее. Как я могу решить проблему? (Например, я выбираю n = 7 первых n членов последовательности q, = 1 1 2 3 3 4 5, затем хочу найти максимальное значение, выберите вариант 2) Спасибо ...

#include <stdio.h>    
#include<stdlib.h>
#include<math.h>
#define MAX 500

void hof(int*arr, int n);
int fm(int arr[], int index, int maximum);
void menu() {
  int nu;
  int n;
  int maximum;
  int i;
  int arr[MAX];
  printf("               Please make your choice\n");
  printf("-----------------------------------------\n");
  printf("1) FILL ARRAY\n\n");
  printf("2) FIND BİGGEST VALUE\n\n");
  printf("3) CALCULATE SUM\n\n");
  printf("4) CALCULATE STANDART DEVİATİON\n\n");
  printf("5) EXIT\n\n");
  printf("please select one of them\n");
  scanf("%d",&nu);

  switch (nu) {
    case 1:
      //int i;  
      //int n;
      //int arr[MAX];   
      printf("How many elements to print: ");
      scanf("%d",&n);

      for (i = 0; i < MAX; i++) {
        arr[i] = 0;
      }

      hof (&arr[0], n);
      break;

    case 2:
      maximum = fm(arr, 0, n);
      printf ("the largest number of sequence is %d", maximum);

  }
}

int main () {
  menu ();
}

void hof (int*arr, int n) {
  int i;

  for (i = 0; i < n; i++) {
    if (i == 0 || i == 1)
      arr[i] = 1;
    else
      arr[i] = arr[i - arr[i - 1]] + arr[i - arr[i - 2]];
  }

  for (i = 0; i < n; i++)
    printf("Q(%d)->%d\n",i+1,arr[i]);
}

int fm (int arr[], int index, int maximum) {
  int n;
  int i;

  for (i = 0; i < n; i++) {
    if (i == 0 || i == 1 )
      arr[i] = 1;   
    else
      arr[i] = arr[i - arr[i - 1]] + arr[i - arr[i - 2]];
  }
  int max;
  if (index > maximum - 1) {
    if (arr[index] <= arr[index + 1])
      return arr[index];
   else
     return arr[index+1];
  }
  max = fm (arr, index + 1, maximum);
  if (arr[index] >= max)
    return arr[index];
  else 
    return max;
}

1 Ответ

0 голосов
/ 03 мая 2020

Я думаю, что ваша проблема в том, что теперь вы склеили функции hof и fm в новую функцию fm, этой новой расширенной функции fm нужно знать количество элементов, с которыми нужно работать. Таким образом, вам придется сделать 2 модификации:

1) Добавить подсказку в пункте меню 2, которая запрашивает количество элементов, как в пункте меню 1.

2) В функции fm изменяет предел первого для l oop с n на максимум (так вы называете параметр, представляющий длину массива). Я также удалил строку int n;, так как объявление n в качестве локальной переменной не имеет смысла в этом контексте. Это потому, что функция fm уже получает длину массива через свой максимальный параметр.

Таким образом, полученный код с этими незначительными изменениями будет выглядеть следующим образом (я пометил измененные строки, всего 4, стрелками):

#include <stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAX 500

void hof(int*arr, int n);
int fm(int arr[], int index, int maximum);
void menu() {
  int nu;
  int n;
  int maximum;
  int i;
  int arr[MAX];
  printf("               Please make your choice\n");
  printf("-----------------------------------------\n");
  printf("1) FILL ARRAY\n\n");
  printf("2) FIND BİGGEST VALUE\n\n");
  printf("3) CALCULATE SUM\n\n");
  printf("4) CALCULATE STANDART DEVİATİON\n\n");
  printf("5) EXIT\n\n");
  printf("please select one of them\n");
  scanf("%d",&nu);

  switch (nu) {
    case 1:
      //int i;
      //int n;
      //int arr[MAX];
      printf("How many elements to print: ");
      scanf("%d",&n);

      for (i = 0; i < MAX; i++) {
        arr[i] = 0;
      }

      hof (&arr[0], n);
      break;

    case 2:
      printf("How many elements to work with: "); // <==
      scanf("%d",&n); // <==
      maximum = fm(arr, 0, n);
      printf ("the largest number of sequence is %d", maximum);

  }
}

int main () {
  menu ();
}

void hof (int*arr, int n) {
  int i;

  for (i = 0; i < n; i++) {
    if (i == 0 || i == 1)
      arr[i] = 1;
    else
      arr[i] = arr[i - arr[i - 1]] + arr[i - arr[i - 2]];
  }

  for (i = 0; i < n; i++)
    printf("Q(%d)->%d\n",i+1,arr[i]);
}

int fm (int arr[], int index, int maximum) {
  //int n; // <==
  int i;

  for (i = 0; i < maximum; i++) { // <==
    if (i == 0 || i == 1 )
      arr[i] = 1;
    else
      arr[i] = arr[i - arr[i - 1]] + arr[i - arr[i - 2]];
  }
  int max;
  if (index > maximum - 1) {
    if (arr[index] <= arr[index + 1])
      return arr[index];
   else
     return arr[index+1];
  }
  max = fm (arr, index + 1, maximum);
  if (arr[index] >= max)
    return arr[index];
  else
    return max;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...