Program wyszukujący ze zbioru liczb dwie, o najmniejszej różnicy
Ostatnio zmodyfikowano 2010-11-10 15:24
ison |
» 2010-11-10 14:10:41 @up jest to maksymalna wartość jaką może pomieścić int... zazwyczaj taki typ zmiennej jest oczekiwany na wszelakich olimpiadach i konkursach a autor zadania nie powiedział ile może wynosić maksymalnie różnica. Cel był taki aby za pierwszym razem warunek tab[ i ] - tab[ i - 1 ] < najm
był spełniony, wiem że można to rozwiązać inaczej ale ja zrobiłem tak - co za różnica? |
|
Elaine |
» 2010-11-10 14:13:28 I masz absolutną pewność, że to jest maksymalna wartość dla inta dla wszystkich kompilatorów, systemów i architektur? Jeśli by tak było, to po co istnieje INT_MAX (z <climits>) czy std::numeric_limits<int>::max() (z <limits>)? |
|
ison |
» 2010-11-10 14:14:16 tak, mam pewność INT_MAX istnieje po to aby nie trzeba było pamiętać tych wszystkich liczb na pamięć... |
|
Elaine |
» 2010-11-10 14:21:11 Błąd, wcale tak nie jest - na architekturach 16-bit int ma (miał ;>) zwykle 16 bitów (32 bity ma long), na niektórych architekturach 64-bit może mieć 64 bity (na AMD64 akurat zwykle ma 32 bity (choć też niekoniecznie, jest coś takiego jak, dosyć rzadkie, ILP64), ale to nie jest jedyna istniejąca architektura), a na przykład na takim PDP-10 to w ogóle bitów było 36 ;>
INT_MAX istnieje po to, by mieć właśnie największą możliwą wartość dla inta na systemie, pod który program jest kompilowany. Nie zawsze jest to 2147483647. |
|
ison |
» 2010-11-10 14:32:26 jest to tak rzadko spotykane zjawisko, iż można przyjąć że int ma zawsze 32 bity wątpię żeby ktoś kompilował wyżej wymieniony kod na tego typu maszynach gdzie jest inaczej :D ale ok, powinienem był użyć INT_MAX |
|
Elaine |
» 2010-11-10 14:35:22 jest to tak rzadko spotykane zjawisko, iż można przyjąć że int ma zawsze 32 bity |
Jak kod ma być przenośny to nie, nie można. |
|
Kzzav Temat założony przez niniejszego użytkownika |
» 2010-11-10 15:24:14 Program miał działać dla ilości liczb N 1<=N<=1 000 000
I dziękuję, rozwiązanie isona jest dobre. Jedyne co musiałem zmienić to zwiększyć #define MAX_N, i wyrzucić int tab[ MAX_N ] poza int main, ponieważ inaczej "program sprawdzający" wyrzucał błąd.
Ogólnie jak ustaliłem, to w moim programie brakowało po prostu sortowania, zamiast tego sprawdzałem dla każdej liczby po kolei jej wszystkie różnice z innymi liczbami, co bardzo przedłużało proces obliczania. |
|
1 « 2 » |