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

0
gośćabc napisał(a):

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

"Znajdź element o wartości 1/4 średniej wszystkich elementów ciągu"

@Patryk27 próbuje nakierować na rozwiązanie co jest bardziej pomocne niż podanie bezpośrednio rozwiązania. @gośćabc a niby ma się denerwować? Sfrustrowany i niecierpliwy programista ma na prawdę trudno.

1

Tak, potrzebowałbyś dodać jeszcze jednego ifa - tuż przed min = numbers[i];.

1
sweeneytodd napisał(a):

"Znajdź element o wartości 1/4 średniej wszystkich elementów ciągu"

@Patryk27 próbuje nakierować na rozwiązanie co jest bardziej pomocne niż podanie bezpośrednio rozwiązania. @gośćabc a niby ma się denerwować? Sfrustrowany i niecierpliwy programista ma na prawdę trudno.

jestem zarówno sfrustrowany i niecierpliwy, jednocześnie jedym poprawnie zadanym pytaniem wyciągnąłem z Ciebie kluczową informację potrzebną do tego, aby pomóc Ci w rozwiązaniu tego zadania

1

@gośćabc
wez przejdz sie po pokoju wez gleboki oddech ;)

@sweeneytodd
a Ty z kolei nie dziw sie, skoro robisz typowy problem XY. Zadawaj lepiej (bardziej klarownie) pytania to nie bedzie problemow. Gotowca i tak bys nie dostal

0

Ewentualnie wystarczy posortować std::vector i wyniki pokazują się takie jakie powinny być.

0
sweeneytodd napisał(a):

Ewentualnie wystarczy posortować std::vector i wyniki pokazują się takie jakie powinny być.

Litości, sortowanie w takim zadaniu? Żeby wydłużyć czas wykonania???

0

Posortujesz i co? Wciąż nie masz nigdzie tej średniej. To nie tylko jest wolne, to także nie rozwiązuje problemu.

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