Problem ze znalezieniem liczby z wektora

0

Hej,

Napisałem algorytm, który sumuje liczby oraz później próbuje znaleźć najbliższą z zawartych w wektor liczb.
Jest wszystko okej aż do chwili gdy zaczynam wpisywać dane typu: 2 0, -4 2.

Oto funkcja:

int function(std::vector<int> numbers, int x)
{
	int min = numbers[0];
	if (numbers[0] < 0)
	{
		min = min * (-1);
	}
	for (int i = 0; i < numbers.size(); i++)
	{
		if (abs(x- numbers[i]) < abs(x- min))
			min = numbers[i];
	}
	return min;
}

Proszę o pomoc.

3
  1. Co się konkretnie (nie) dzieje?
  2. Jaki jest rezultat funkcji, a jaki powinien być?
  3. Jaki powinien być rezultat Twojej funkcji dla zbioru {0, 4}, gdy szukamy liczby najbliższej do 2?
0
Patryk27 napisał(a):
  1. Co się konkretnie (nie) dzieje?
  2. Jaki jest rezultat funkcji, a jaki powinien być?
  3. Jaki powinien być rezultat Twojej funkcji dla zbioru {0, 4}, gdy szukamy liczby najbliższej do 2?

**Średnią mnożę jeszcze przez *0.25;
Co się dzieje:
Dodaje liczby, np {1 -1 1 -1};
Średnia wynosi wtedy 0;
Szukam najbliższej liczby podanej wcześniej przeze mnie używając funkcji abs(). Wynik 1.

Co się nie dzieje:
Dodaję liczby, np {2 0};
Srednia wynosi: 1.
Szukam liczby najblizszej: wynik to 2 a powinno być 0.

Rezultat dla {0 4} powinien być: 0.

0

Rezultat dla {0 4} powinien być: 0.

Dlaczego akurat 0?
Ponieważ jest mniejsze; ponieważ jest pierwsze na liście (...)?

0
Patryk27 napisał(a):

Rezultat dla {0 4} powinien być: 0.

Dlaczego akurat 0?
Ponieważ jest mniejsze; ponieważ jest pierwsze na liście (...)?

0+4 = 4
4/2 = 2
2*0.25 = 0.5
Bliższe 0.5 jest 0.

0

Inny przykład: {-1, 1}.

Średnia: 0.
Średnia pomnożona przez 0.25: 0.

Jaki powinien być rezultat?

0
Patryk27 napisał(a):

Inny przykład: {-1, 1}.

Średnia: 0.
Średnia pomnożona przez 0.25: 0.

Jaki powinien być rezultat?

Wartość abs() wyniesie z obu stron 1.
Czyli mając z obu stron równą odległość to powinienem dodać dodatkowy warunek zwracający albo mniejszą liczbę z std::vector albo większą?

1

Twoja funkcja ma zwrócić jedną liczbę.
Istnieją przypadki, gdy możliwymi rozwiązaniami są dwie.
Ja tylko pytam, co ma się w takich przypadkach dziać, ponieważ to musi być ustalone, aby dało się tę funkcję napisać :-P

0
Patryk27 napisał(a):

Twoja funkcja ma zwrócić jedną liczbę.
Istnieją przypadki, gdy możliwymi rozwiązaniami są dwie.
Ja tylko pytam, co ma się w takich przypadkach dziać, ponieważ to musi być ustalone, aby dało się tę funkcję napisać :-P

Program ma podać jedną z tych liczb, powiedzmy tę większą. Czyli dodać jeszcze jednego ifa który będzie dodatkowo sprawdzał

0

wow, zamiast męczyć się tymi wyrykowymi pytaniami, niech może dzieciak przepisze treść zadania?
@Patryk27, że jeszcze nie straciłeś cierpliwości

9 postów a ja wciąż nie wiem o co chodzi pytającemu

1 użytkowników online, w tym zalogowanych: 0, gości: 1