Najwieksza liczba z wprowadzonycnh
Ostatnio zmodyfikowano 2020-01-03 19:12
harassment_____ Temat założony przez niniejszego użytkownika |
Najwieksza liczba z wprowadzonycnh » 2020-01-03 14:47:20 Takie wymyslilem sobie zadanie. Czy ten kod wyglada poprawnie? Jak usprawnić go by wyrzucał też najmniejsza liczbe bo dodanie kolejnego if po else bezcelowe. EDIT: Poprawilem go. Przeszłoby na spoj? #include <iostream>
using namespace std; int tablica[ 100 ], indeks = 0, max2; int indeks3 = 0; int indeks2 = 1; int m, mi; int main()
{ cout << "Ile chcesz wprowadzic liczb: " << endl; cin >> indeks; cout << " Wprowadz liczby oddzielone spacja: " << endl; for( int i = 0; i < indeks; i++ ) cin >> tablica[ i ]; m = tablica[ 0 ]; mi = tablica[ 0 ]; for( int i = 0; i <= indeks; i++ ) { if( m <= tablica[ indeks2 ] ) { m = tablica[ indeks2 ]; indeks2++; } if( mi >= tablica[ indeks2 ] ) { mi = tablica[ indeks2 ]; } } cout << "Najwieksza i najmniejsza liczba jest liczba: " << m, << mi; return 0; }
|
|
pekfos |
» 2020-01-03 15:20:24 Czy ten kod wyglada poprawnie? |
Nie. Próbowałeś go skompilować? Po co w ogóle używasz tablicy? Rozwiązanie problemu wymaga jednorazowego przejścia po danych, a to możesz osiągnąć bez przechowywania wszystkich danych naraz. Jak wymyślisz też formalny opis zadania, jaki mógłby weryfikować tester automatyczny, to możemy się wtedy zastanawiać. |
|
harassment_____ Temat założony przez niniejszego użytkownika |
» 2020-01-03 15:48:49 Okej. Znalazlem blą. Bez tablicy? wiem ze moge wczytac caly wiersz getline(), ale jak potem porownac elementy ze soba? jak mniemam zapisuja sie w formacie string prawda? I dochodzi tez kwestia pominiecia spacji. |
|
pekfos |
» 2020-01-03 16:49:14 Już masz pętlę wczytującą liczby. Tablica nie jest tam do niczego potrzebna. |
|
harassment_____ Temat założony przez niniejszego użytkownika |
» 2020-01-03 18:14:59 Rozumiem o co chodzi ale nie wiem jak to zapisać. Wprowadzam z klawiatury pierwsza cyfrę. Klikam spacje. Wprowadzam druga. I teraz pętla ma sprawdzić czy ta druga jest większa od pierwszej. Jedynym wyjściem jakie widzę to na poczatek pytam o ilość liczb, potem pytam o liczby. Pierwsza wczytuje do zmiennej X. Potem otwieram petfle for i sprawdzam czy x jest mniejsza od kolejnej liczby Y. Jeśli tak X=Y. Dobrze rozumiem? Niestety nie mam jak napisać tego teraz. |
|
pekfos |
» 2020-01-03 18:36:47 Gdy wczytujesz kolejną liczbę, możesz od razu jej użyć do zaktualizowania minimum i maksiumum. Później ta liczba nie jest do niczego potrzebna, więc nie ma sensu jej trzymać w tablicy. W kontekście SPOJa tablica to tragiczne rozwiązanie, bo tam możesz mieć do czynienia z milionami liczb do przetworzenia, a tablica na te miliony liczb może nie spełnić wymogów pamięciowych. for( int i = 0; i < indeks; i++ ) { cin >> liczba; } Zamiast myśleć o wyliczaniu minimum jako porównywaniu pierwszej liczby z drugą, algorytm można uprościć jeśli porównujesz minimum z pierwszą liczbą, potem z drugą i tak dalej. Na początek minimum musi być nie mniejsze niż jakakolwiek możliwa liczba na wejściu. Na SPOJu zwykle jest określony zakres liczb wejściowych, ale w tym wypadku możemy założyć że są to dowolne poprawne liczby typu int: int min = std::numeric_limits < int >::max(); int max = std::numeric_limits < int >::min();
|
|
harassment_____ Temat założony przez niniejszego użytkownika |
» 2020-01-03 19:12:19 Dobra rozumiem. Zrobię to jeszcze raz jutro w domu. Dziękuję za pomoc. |
|
« 1 » |