Cześć,
warto korzystać w tym przypadku z wbudowanej funkcji abs, a wszystkie wartości najlepiej od razu zadeklarować wartością 0, tak samo najlepiej unikać zmiennych globalnych, w tym wypadku nie są potrzebne.
Nie są Ci potrzebne również dwie wartości, które przechowuje liczby tak samo oddalone, SPOJ chce tylko najbliższą.
Można przyjąć, że początkowa wartość argumentu m to różnica 0 elementu tablicy ze średnią, najbliższa wartość póki co to również m.
W pętli iterujemy teraz od 1 elementu, (0 mamy załatwiony).
Jeżeli różnica jest taka sama jak wartość zmiennej m, lub wartość wynosi 0 (średnia taka sama jak wartość danego elementu), lub m jest mniejsza niż różnica, to kontynuujemy wykonywanie pętli, bez żadnego przypisania.
Jeżeli różnica jest mniejsza niż wartość m (co oznacza, że liczba jest bliżej) to:
- Teraz najbliższą wartością jest liczba[i]
- Wartość elementu m to różnica między liczbą a średnią
Mam nadzieję, że pomogłem
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float liczba[5]; //tablica na 5 zmiennych
float najblizej = 0;
float srednia = 0, suma=0,roznica = 0;
cout << "Podaj swoje 5 liczb: " << endl;
for (int i = 0; i < 5; i++)
{
cout << "Podaj " << i+1 << " liczbe: ";
cin >> liczba[i];
suma += liczba[i];
}
srednia = suma / 5;
float m = abs(liczba[0] - srednia);
najblizej = liczba[0];
for (int i = 1; i < 5; i++)
{
roznica = abs(liczba[i] - srednia);
if (roznica == m || roznica == 0 || m < roznica )
continue;
else if (roznica < m)
{
najblizej = liczba[i];
m = roznica;
}
}
PS
jeżeli chciałbyś wypisać więcej elementów tak samo zbliżonych do średniej, można wtedy użyć tablicy.
Pozdrowienia