Znalezienie dwóch największych liczb.

0

Witam
Dopiero zaczynam swoją przygodę z C++, teraz przyszedł czas na pętle.

Zadanie polega na znalezieniu dwóch największych liczb zapisanych w pojedynczej kolumnie.

Wejście :
W kolejnych wierszach standardowego wejścia zapisano po jednej liczbie naturalnej N (1 < N < 60 000). W ostatnim wierszu zapisano wartość
‘0’ co kończy dane. Liczba wierszy nie przekracza 30 000.

Wyjście :
Na standardowe wyjście, w jednym wierszu wypisz, oddzielając spacją, dwie największe liczby w porządku nierosnącym.

Problemu z tym zadaniem bym nie miał, gdyby nie to, że nie wiem ile jest tych liczb, bo dopiero zostaną podane.
Jakieś wskazówki ?

0

Ale po cóż ci wiedzieć ile tych liczb jest? Czytasz w pętli aż nie trafisz na liczbę 0. Gdzie widzisz problem?

int liczba;
do{
    scanf("%d",&liczba);
    //cośtam cośtam
}while(liczba != 0);
0
while(cin>>a != 0)
0

Problem polega na tym, że jak już zostaną wypisane liczby, to co dalej z nimi zrobić ?

0

trzymaj sobie dwie zmienne:
lider
vicelider
jeśli na wejsciu dostaniesz zmienną większą od videlider to sprawdz, czy jest wieksza od lidera. jeśli tak - ustaw lidera jako liczbe z wejscia. jeśli nie - ustaw vicelidera na liczbe z wejscia.

0

@jakubs należy wtedy użyć mózgu. Gdybyśmy zagrali w taką grę że ja dyktuje ci ileśtam liczb i na koniec masz mi podać 2 największe to jakbyś to zrobił? Masz do dyspozycji kartkę i ołówek.

0

@zonkoo22 dzięki już wiem o co chodzi, teraz jest problem jak to przenieść do c++. Mam to wszystko wykonać w obrębie 1 pętli ?

0

A po co Ci inne? Dodam, ze w jednej pętli możesz wykonac wczytanie i (od razu) szukanie lidera i vicelidera. Tylko takie rozwiązanie ma sens.

0

Nie mogę nic sensownego wymyślić.
Poratuje ktoś ?

0

A czego nie umiesz? Kod z pętlą i czytaniem liczb już masz podany wyżej. Brakuje ci tylko porównywania liczb i zapamiętywania wyniku. Nie wiesz jak napisać "ifa" czy jak przypisać zmiennej wartość? Ostrzegam że za proszenie o gotowca temat poleci do kosza a już sie na to zanosi...

0
#include <iostream>
using namespace std;
int main()
{
  int lider=0, vicelider=0;
  int a;
  while(cin>>a && a!=0)
    {
      if(a>=vicelider)
        {
          if(a>=lider)
            {
              vicelider=lider;
              lider=a;
            }
          else vicelider=a;
        }
    }
  cout<<"lider: "<<lider<<endl;
  cout<<"vicelider: "<<vicelider<<endl;
  return 0;
}

Prościej się chyba nie da.

0

@Shalom ja uczę się dla siebie nikt mnie z tego nie ocenia, więc to, że ktoś mi poda rozwiązanie nie oznacza ze ja uznam to że zadanie zrobiłem. Nie pomyślałem o tym żeby przypisać wartości 0 dla tych 2 liczb i głowiłem się nad tym no i nie wymyśliłem. Będę siedział nad tym zadaniem, aż je zrobię i co ważniejsze je zrozumiem, a nie jak ktoś poda mi gotowca.

0

Czy to zadanie nie jest aby z kursu/konkursu (nie wiem jak to nazwać :P ) "Programowanie na start"?

0

Zadanie udało mi się rozwiązać, podobnie jak @zonkoo22 tylko, że wykorzystałem pętle do..while i na końcu zgodnie z treścią powinno być wszystko w ostatniej linijce oddzielone spacją, ale to kosmetyka.
Dzieki za pomoc

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