Этот код работает.
#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;
}