Jak wyznaczyć drugi co do wielkości element z ciągu?

0

Witam Robię od zadanie i po kilku nie udanych próbach skończyły mi się pomysły aby wyznaczyć drugi co do wielkości element z ciągu czy mógłby mi ktoś pomóc dziękuje :)

2

Zapamiętujesz dwa największe elementy i sobie je aktualizujesz po napotkaniu każdego kolejnego elementu ciągu. Albo zapisujesz cały ciąg i sobie go sortujesz/wkładasz do sortowanego kontenera (np multiset)

0

dziękuje lecz zapomniałem dodać że jestem początkującym i moje możliwości nie wykraczają ponad pętle i if itp. A nie chcę w sieci gotowca szukać

1

To się dobrze składa - pętle i instrukcje warunkowe to wszystko co potrzebujesz do wykonania tego zadania :-)

Jak podszedłbyś do tego problemu ręcznie (na kartce)?

0

chciałem wyznaczyć liczbę największą i kombinować lecz nie wychodziło nie chodzi mi o gotowiec lecz nie mam pomysłu

0

Let me rephrase.

Przychodzi do Ciebie szef, daje kartkę z wypisanymi 20 liczbami i każe Ci wyznaczyć (ręcznie!) drugą co do wartości z nich.
Jak podchodzisz do tematu?

0

wyznaczam największą następnie szukam drugiej w kolejności

0

Ok, a w jaki sposób szukasz drugiej w kolejności?

0

nie wiem czy o to chodzi ale patrząc odejmując od ciągu największą i szukając jej na nowo

0

Najprościej , wyznasz MAX z ciągu 1...n. Zapisz wartość. Usuń tą wartość z listy / pomiń ją / wyznacz MAX z ciągu zapisz.

I masz tym sposobem dwa maksy. Większy jest 1-wszym, 2-gi drugim

0

dziękuje :) jeszcze pytanie jak od tablicy odjąć jedną wartość ? t[n]-maxi ? zakładając że maxi to największa z ciągu a n to wielkość tablicy ?

0

Można zrobić to prościej. W pierwszym przebiegu szukasz indeksu największej wartości. W drugim przebiegu szukasz największej wartości pomijając indeks obliczony w poprzednim przebiegu.

0

ok dziękuje a jak pominąc tą pierwszą największą wartość ??

1

ifem. W pierwszym przebiegu liczysz np indeks_największej_wartości. W drugim przebiegu robisz kolejną pętlę, np z indeksem indeks i w środek wstawiasz ifa if (indeks != indeks_największej_wartości).

0

dziękuje bardzo :)

0
#include <iostream>

using namespace std;
int main(int argc, char** argv) 
{
	int n;
	cin>>n;
	int tablica[n];
	for(int i=0 ; i<n ; i++)
	{
		cin>>tablica[i];
	}
	int maxi=0;
	int a=0;
	for(int i=0 ; i<n ; i++)
	{
		if(tablica[i]>maxi)
		{
			maxi=tablica[i];
		}
		
	}
	for(int i=0 ; i<n ; i++)
	{
		if(i!=maxi)
		{
			i=tablica[i];
			cout<<i;
		}
	}
	cout<<maxi;
	
	return 0;
}

Mam coś takiego i nie działa poprawnie w czym jest błąd ?

0

Twoja zmienna maxi wcale nie reprezentuje indeksu tablicy, tylko wartość pod tym indeksem (maxi=tablica[i];).

0

w pierwszym for chciałem wyznaczyć pierwszą największą mam rozumieć że to jest źle ?

0

Tak, jest źle - raz traktujesz maxi jak wartość (if(tablica[i]>maxi)), a raz jak indeks (if(i!=maxi)).

0

czyli jeżeli dobrze rozumiem maxi ma zostać tylko zmienną

0

indeksem, tak ;-)

0

czyli ostatecznie jak to poprawić moja głowa już nie nadąża tutaj zmienić if(tablica[i]>maxi) to maxi ? jeżeli tak to na co ?

0
if (tablica[i] > tablica[maxi]) {
  maxi = i;
}

Warunek if(i!=maxi) także jest zły - pomyśl dlaczego.

0

aktualnie wyznacza mi najmniejszą i drugą najmnijeszą

0

if(i!=maxi) czy to wina tego ?

0

Przeanalizuj tę drugą pętlę swojego kodu i powiedz czy realizuje ona obydwa warunki postawione w założeniu:

W drugim przebiegu szukasz największej wartości pomijając indeks obliczony w poprzednim przebiegu.

0

ona chyba nie pomija tej wartości największej tak ?

0

Ty mnie pytasz?
Przecież to Ty napisałeś ten kod - powinieneś wiedzieć co robi :-)

0

korzystałem z rad kilku użytkowników i wszystko się mi już pomieszało :P ten if jest trochę bez sensu

nie wiem tylko jak zapisać to aby program pominął tą jedną wartość

0

Powoli.

Druga pętla ma realizować dwa warunki:

  1. Znajdywać największą liczbę.
  2. Znajdywać liczbę różną od maxi.

Jak zapisałbyś obydwa warunki w kodzie?

(protip: pierwsza pętla realizuje już pierwszy warunek)

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