Найти и вывести номер элемента, для которого сумма разностей с соседними элементами максимальна - C (СИ)
Формулировка задачи:
Ввести массив вещественных чисел. Найти и вывести номер элемента, для которого
сумма разностей с соседними элементами максимальна. Для крайних элементов
использовать циклическое замыкание.
Простенькая программа, но она не работает, не понятно, почему...
#include <stdio.h> #define MAX 100 int t; int getline(char s[], int lim) { int i=0, f; char c; for (i=0; (i<(lim-1)) && ((c=getchar()) != EOF) && (c != '\n'); i++) s[i]=c; t=i; return i; } void main (void) { char line[MAX]; int dif1, dif2; int num1=1, num2; //num1 текущий элемент; num2 искомый элемент int sum, max; int i; printf("Enter string:\n"); getline(line, MAX); max=0; for (i=1; i<t; i++) { dif1= (line[i]- '0') - (line[i+1]- '0'); dif2= (line[i-1]- '0') - (line[i]- '0'); sum = dif1+dif2; if (sum> max) {max = sum; num2 = num1;} num1++; } dif1= (line[0]- '0') - (line[1]- '0'); dif2= (line[t]- '0') - (line[0]- '0'); sum = dif1+dif2; if (sum> max) {max = sum; num2=0;} dif1= (line[t-1]- '0') - (line[t]- '0'); dif2= (line[t]- '0') - (line[0]- '0'); sum = dif1+dif2; if (sum> max) {max = sum; num2=t;} printf("number= %d %d", num2, max); }
Решение задачи: «Найти и вывести номер элемента, для которого сумма разностей с соседними элементами максимальна»
textual
Листинг программы
#include <stdio.h> float getDiff(float* arr, int size, int pos) { if (pos == 0) { return 2*arr[0] - arr[1] - arr[size-1]; } else if (pos == size-1) { return 2*arr[size-1] - arr[size-2] - arr[0]; } else { return 2*arr[pos] - arr[pos-1] - arr[pos+1]; } } int main(void) { float arr[] = {1, 2, 100, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); int max = 0; for (int i=1; i < size; ++i) { if (getDiff(arr, size, max) < getDiff(arr, size, i)) { max = i; } } printf("%d %f", max, getDiff(arr, size, max)); return 0; }
Объяснение кода листинга программы
- Включаем стандартную библиотеку ввода-вывода (stdio.h).
- Создаем функцию getDiff, которая принимает на вход массив, его размер и позицию текущего элемента. Функция вычисляет разность между текущим элементом и его соседями (с предыдущим и следующим элементами). Если позиция равна 0, то возвращается разность между вторым и первым элементом, если позиция равна размеру массива минус 1, то возвращается разность между последним и предпоследним элементом, в остальных случаях возвращается разность между текущим элементом, предыдущим и следующим элементом.
- Создаем функцию main. Инициализируем массив arr, вычисляем его размер. Создаем переменную max, которая будет хранить номер максимального элемента. Проходим циклом по массиву от 1 до размера массива минус 1. В каждой итерации сравниваем разность, которую вернула функция getDiff для текущего элемента и max, с разностью, которую вернула функция getDiff для следующего элемента. Если разность для текущего элемента меньше, то обновляем значение max.
- Выводим на экран номер максимального элемента и разность, которую вернула функция getDiff для этого элемента.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д