81 / 153
Dec 2017

W twoim kodzie widzę za mało komentarzy.
Dziwne, nawet jeden mały, zamienia twój kod w kod AC. No może nie dziwne. Dopisz dwie kreseczki komentujące "//", na początku linii 27 i sam się przekonaj.

Z powyższego wynika, że można pomyśleć nad ulepszeniem tego kodu, nie koniecznie nad nowym.

Dlaczego ideone daje mi inne wyniki niż code blocs (ten drugi bardziej mnie kocha). Podejrzewam, że jest coś nie tak z tablicami.

Dokładnie tak. Blocks zeruja pewną zmienną za ciebie, a ideone czasami tak, a czasami nie, w zależności od humoru - oczywiście żartuję.

Wszystko zależy jak intensywnie wcześnie była "używana" przydzielana pamięć. Pamiętaj, że zmienne lokalne nie są automatycznie zerowane. Wystarczy więc to tylko zrobić, dodać tylko 3-4 znaczki [wliczając dwie spacje] w odpowiednim miejscu: " = 0" i już :wink:

dobra. Teraz ideone pokazuje dobre wyniki ale spoj wyswietla bledną odpowiedź.

Miałeś poprawić tylko jedną jedyną, błędną rzecz, a nie wprowadzać inne poprawki i powodować nowe błędy.

3 months later

Algorytm wygląda na poprawny (ale bardzo dokładnie nie sprawdzałem :wink: ), brakuje Ci nowej linii po każdej odpowiedzi.

Witam. Spoj pokazuje bledna odpowiedz mi natomiast niestety nie udalo sie znalezc bledu.(biblioteki to iostream cmath stdlib.h math.h w komentarzu nie pokazywalo wiec tu pisze)

include

include

include

include

using namespace std;
int n,t,j;
double srednia,najblizsza,suma,m;

int main()

{
cin>>t;
double *testy=new double [t];
for(int i=0; i<t; i++)
{
suma=0;
cin>>n;
int *tab=new int [n];
for(int j=0; j<n; j++)
{
cin>>tab[j];
suma+=tab[j];
}
srednia=suma/n;

    double *odleglosc=new double [n];

    for(int j=0; j<n; j++)
    {
        odleglosc[j]=fabs(srednia-tab[j]);
    }


    m=odleglosc[j];

    for(int j=0; j<n; j++)
    {
        if(m>odleglosc[j])
            m=odleglosc [j];
    }

    najblizsza=tab[j];
    for (int j=0; j<n; j++)
    {
        if(m==fabs(srednia-tab[j]))
        {
            najblizsza=tab[j];
            break;
        }
    }
    cout<<najblizsza;


}
return 0;

}

6 months later

Cześć
zerknie ktoś na kod ?
nie bardzo mogę się połapać co jest nie tak.
[kod usunięty]
pozdrawiam

sprawdź wynik dla takich danych:

6
4 8 10 4 10
4 10 8 10 4
4 8 11 4 10
4 11 8 10 4
4 11 10 4 8
4 8 11 10 4

ACC:smiley:
Sprawdziłem wyniki, pętla przepisująca wartość była niepoprawna. Dzięki więc za testy bo bardzo pomogły. :slight_smile:
Swoją drogą zaczęło mnie zastanawiać jaka jest logika pisania takich testów do programów, w sensie skąd wiesz że to w tym konkretnym miejscu może być błąd, albo tu się “kryje niespodzianka” :thinking: ?

bo mam wewnętrzny kwantowy kompilator C/C++ i na nim potrafię w sposób równoległy przetestować wszystkie możliwe dane wejściowe - potem tylko wybieram te co dały zły wynik :slight_smile:

a serio to programuję zawodowo, a ostatnie lata to głównie poprawianie cudzych kodów

14 days later

[kod usunięty]
Jakieś testy, które pokażą błędne wyniki ktoś znajdzie? Byłbym zobowiązany :smiley:

ahm… dobra xDD przeszło :smiley: Dzięki, chyba za długą przerwę w programowaniu miałem, że taki bład zrobiłem xD

19 days later

Hej. Mam prośbę, czy podpowie mi ktoś dlaczego wyrzuca błędną odpowiedź ?

Błędnie zakładasz, że ciąg jest monotoniczny:

1
6 1 2 3 4 3 1

Twoja odpowiedź:

3
1 month later

Witam odgrzeje temat początki nauki w C++ czy może ktoś wskazać co robię nie tak? Wydaje mi się że zadanie zrozumiałem dobrze…

#include "iostream"
#include "cmath"

using namespace std;

int ileLiczb, ileTestow, suma, cel, n;
double srednia;


int main()
{
	cin >> ileTestow;
	if (ileTestow < 101)
	{
		for (int j = 0; j < ileTestow; j++)
		{

			cin >> ileLiczb;

			int *tablica = new int[ileLiczb];

			for (int i = 0; i < ileLiczb; i++)
			{
				cin >> n;
				if (n > 0 && n < 100)
				{
					tablica[i] = n;
					suma += tablica[i];
				}
				else
				{
					i -= 1;
				}
			}

			cel = tablica[0];
			srednia = suma / ileLiczb;

			for (int i = 0; i < ileLiczb; i++)
			{
				if ((abs(srednia - tablica[i])) < ((abs(srednia - cel))))
					cel = tablica[i];
			}

			cout << cel << endl;
		}
	}
	else
	{
		cout << "Max prob 100; " << endl;
	}

    return 0;
}


spojrzał by ktoś co nie gra ?

niepotrzebnie zbyt skomplikowany
sprawdź dla danych:

2
7 3 1 2 4 5 6 4
7 4 1 2 3 5 6 4


poprawiłem ,ale cały czas coś musi być nie tak

nie poprawiłeś, bo pisałem, że program nadmiernie skomplikowany :slight_smile: - i taki pozostał
a każda zbędna linia to dodatkowa szansa na błąd

sprawdź dla danych:

2
6 1 2 3 4 5 6
6 3 4 1 2 5 6
4 months later

No dobra to teraz ja :slight_smile: Może mi ktoś podać testy dla których ten kod nie działa?

ok

nie powiem strasznie sie nameczylem a blad jak zwykle bananalny

to nie jest twój pierwszy post, i zapewne przeczytałeś ten wątek - to powinieneś wiedzieć, że kod programu powinien być przekazywany jako link do ideone.com3

2
4 4 1 3 2
4 2 3 4 1
3 months later

Czy mógłbym prosić o pomoc - co jest nie tak z moim kodem?

Tak, to znaczy mógłbym bo znalazłem całą gamę testów, których nie przechodzisz, ale potrzebuję Twojej pomocy…

Ok, w takim razie test:

in

50
20 89 7 11 83 32 73 63 72 93 43 82 11 53 45 97 88 47 67 43 87
20 48 79 49 63 50 35 31 8 21 15 3 86 88 97 97 58 24 94 62 93
20 12 79 93 25 41 59 6 97 4 81 34 36 86 59 35 62 27 37 47 63
20 68 86 50 61 88 78 86 27 60 25 41 49 83 61 87 17 38 34 70 5
20 76 50 22 19 69 13 56 64 55 63 23 45 86 56 30 56 85 74 96 26
20 54 52 22 24 8 46 86 68 33 86 61 84 88 89 66 74 52 16 31 52
20 74 94 23 5 61 25 17 49 46 62 6 98 55 34 18 74 91 99 83 91
20 49 63 7 46 90 90 8 45 56 11 59 32 55 85 65 77 78 71 68 82
20 79 57 98 96 15 79 60 75 57 61 71 13 47 73 44 73 15 69 92 6
20 16 4 87 13 29 89 43 29 28 20 2 34 78 52 13 91 96 66 8 6
20 69 18 37 22 86 80 53 76 46 41 22 48 47 93 12 73 97 37 2 97
20 39 69 54 98 18 67 74 51 28 62 86 60 88 95 86 85 37 85 50 60
20 70 28 28 16 84 75 89 50 39 98 82 2 85 91 56 78 62 33 49 21
20 6 58 79 49 64 83 79 4 8 34 76 49 15 58 68 75 17 64 1 80
20 28 59 39 25 76 48 5 52 46 31 52 5 2 73 39 10 26 84 49 41
20 57 81 11 11 4 70 23 27 84 3 17 9 76 19 71 63 80 23 15 6
20 3 42 15 29 22 99 99 7 70 67 43 66 92 59 82 16 32 90 9 83
20 94 84 25 49 47 52 87 7 91 69 36 22 9 38 34 52 38 20 70 82
20 66 30 69 90 27 88 15 8 2 66 63 40 90 54 24 49 40 74 38 69
20 56 60 99 63 72 82 65 3 35 71 94 30 73 67 2 48 21 38 73 6
20 1 55 66 14 48 23 65 92 26 60 49 33 4 34 44 54 79 12 53 48
20 64 25 26 18 91 57 53 24 52 77 77 70 4 58 48 44 43 75 91 84
20 74 89 63 3 75 65 69 9 47 58 97 61 76 93 42 45 73 7 90 64
20 55 63 1 76 43 2 39 24 3 96 16 91 33 96 45 55 66 31 16 42
20 60 76 34 24 54 88 46 67 91 76 6 24 17 69 18 78 89 11 59 82
20 52 20 18 14 98 94 32 91 61 82 70 7 77 61 73 98 83 62 74 47
20 47 40 74 61 86 90 94 45 48 32 47 37 1 25 9 85 31 72 18 15
20 10 13 16 4 32 9 92 28 51 56 4 65 47 84 39 21 13 38 83 95
20 29 68 74 38 33 17 78 93 55 81 92 59 30 96 36 23 73 69 16 61
20 79 93 66 14 55 28 8 33 63 17 25 80 65 32 60 83 91 83 85 9
20 86 77 63 20 41 38 10 1 18 98 26 16 58 60 98 57 19 24 59 4
20 91 46 17 27 91 93 73 2 74 2 94 19 61 91 50 87 84 41 84 19
20 44 61 19 53 10 31 61 28 77 66 13 30 33 63 28 13 55 97 99 14
20 36 35 93 28 95 19 16 16 34 26 60 95 61 16 63 2 63 44 54 37
20 5 40 36 93 5 15 39 71 55 25 12 4 91 93 55 18 29 47 65 94
20 86 57 44 59 2 57 45 31 45 89 64 40 17 72 70 65 79 53 44 65
20 78 97 56 87 2 37 49 76 21 28 90 83 68 8 56 2 31 84 22 45
20 69 18 91 84 91 52 34 56 20 12 44 55 82 19 39 65 20 60 87 29
20 63 75 60 82 58 47 19 63 35 59 83 71 36 36 21 40 68 29 63 3
20 71 37 45 91 67 5 63 57 20 83 78 98 62 68 70 29 45 54 13 48
20 17 44 31 23 25 78 88 79 37 90 81 66 51 99 71 32 50 57 16 96
20 35 52 31 89 99 78 30 32 60 46 53 47 19 26 53 15 36 25 13 77
20 64 82 57 58 64 93 66 52 35 14 95 43 45 83 50 16 67 45 3 95
20 91 37 74 58 93 20 45 29 56 64 60 10 3 85 70 53 14 41 45 47
20 86 78 26 66 66 22 75 45 13 21 43 87 33 77 40 16 10 75 59 71
20 11 15 1 80 6 87 74 35 87 72 26 33 20 85 54 50 21 72 11 60
20 42 16 56 51 73 65 94 70 8 51 42 78 63 24 25 89 90 40 82 59
20 28 36 48 70 98 63 7 75 33 14 42 47 67 55 46 19 51 18 73 64
20 3 85 83 24 75 79 95 58 13 6 16 61 28 46 51 23 79 2 17 82
20 97 28 51 29 8 52 35 67 52 31 2 87 22 61 38 64 77 52 88 57

Mój out:

63
58
47
60
55
54
55
56
60
43
53
67
56
49
39
27
59
49
49
56
44
53
61
45
54
61
48
39
55
55
41
61
44
44
47
53
49
52
47
54
57
46
57
47
45
50
56
48
46
51

Ty masz zupełnie inny

po co tak skomplikowany test :slight_smile: - wystarczy prosty:

1
4 5 16 12 7

Do rozwiązanych lub rozwiązywanych zadań tworzę często generatory. Najczęściej przypadków trudniejszych :wink:

Jak dla mnie, chociaż sam mam psa, a córka jest właścicielką pięknej klaczy, to i tak za dużo zwierzaków, @niedzwiedz89 bear, kot, koń, klacz itd :wink:

Tak naprawdę, do AC brakuje bardzo niewiele, dwóch malutkich nawiasików.

Jednak twój kod, mimo starannego użycia białych znaków [niestety tylko w poziomie :wink: ] i pomocy zwierzaków, pozostawia dużo do życzenia.

c.match
zmienne globalne

itd

Czemu koń? I czemu nie ma imienia? Np Różnica, albo Różniczka?
Czemu klaczy dajesz tylko 100 pkt? :wink: [taki żart, oczywiście że wiem czemu].
W C++ zamiast tablic (plus: new i delete[]), można i powinno się używać [z STL’a] wektorów.
Wskaźniki? To domena C, w C++, jeżeli już, to są bardziej inteligentne. No i po co Ci one w twoim kodzie? Aby go skrócić i uprościć? Jeżeli tak, to Ci się niestety nie udało.
*kot++ i *kot-- świadczą, że nie odrobiłeś lekcji [nie doczytałęś, niezrozumiałeś]
Ewentualnie [chociaż *kot++, *kot–, nie powoduje błędu] zamień jednak w twoim kodzie i w takim przypadku [takim użyciu] na poprawniejsze [i krótsze]:
kot++, kot–

PS
klacz = kon[ń] ? No niby racja, ale gdzie jest ogier? A wtedy czasami ogier + klacz = źrebak, gdzie źrebak = młody_koń [ogierek lub klaczka]. :wink: I wtedy może wynik to źrebię? :wink: O czymś zapomniałem? Wałach?
Może lepiej pozmieniać i ponadawać wszystkim zwierzakom odpowiednie imiona? Ułatwiło by to czytanie kodu pomagającym, nie znającym się na zwierzęcych koligacjach i niuansach. Np różnica, różnicaMinimalna, różniczkaAktualna itd

PS 2
Wydaje mi się, że łatwiej byłoby mi poprawić twój kod, niż wymieniać wszystkie błędy. Oczywiście nie byłaby to tylko [jedna] wersja poprawiona i nie gwarantuję, że najlepsza z wszelkich możliwych, ale tu nie zamieszczamy działających kodów.
Dlatego, ewentualnie po AC, możesz mnie poprosić [o taką poprawioną wersję twojego kodu], poprzez PM [prywatny mail]. Preferuję in English, + parę słów wstępu o sobie + przeczytanie i refleksja na temat wątku: jak zdobyć szacun na SPOJ’u.

Pytanie było czemu, a nie jak :wink: Może twoje generator[y] “powinne być” jeszcze bardziej inteligentne [AI] lub jeszcze bardziej interaktywne? :wink:

A tak na serio, jeżeli w kodzie pytającego, znajdzie się błąd, można wymyśleć odpowiedni, pojedyńczy test, “pod” ten błąd. Czasami jednak jest to trudniejsze i łatwiej wygenerować odpowiednio duży test i przetestować na nim kod pytającego. Potem, można z takiego dużego testu wyciąć pojedyńczy, czy kilka błędnych. Tak czy siak [zarówno generowanie jak i czytanie i “ręczne” analizowanie kodu] jest pracochłonne i często i tak nie doceniane adekwatnie [albo mało doceniane] przez pytających.

Zdecydowana racja przyznaje się na wejściu poszedłem na łatwizne i skorzystałem z podpowiedzi “mariusz193” - redysz widząc jak się napracowałeś jest mi wstyd :frowning: sorry… (Jak się tworzy takie generatory…?)
Ale z drugiej strony poco sobie utrudniać jak można łatwiej :stuck_out_tongue:

W każdym bądź razie dziękuje wam bardzo za pomoc i za tak szybką reakcję - niesamowite jak prężnie działa to forum.

“narberj” bez kitu taka mała rzecz a taką robi robotę - ale cieszę się, że robię takie błędy bo to dużo uczy :slight_smile:
A ja jak sam widzisz jestem jak te moje zwierzaki - byty zmienne żyjące w stadzie jedynie podążające w jakimś kierunku, kierujące się instynktem… A zresztą spójrz na fenomen biedronkowych świerzaków, słodziaków niby bezsens ale robią robotę także rozumiem, że takie zmienne mogą sprawiać kłopot dla sprawdzających (sorry) ale z drugiej strony zawsze coś innego i jakoś raźniej :slight_smile: (Chyba dlatego moje zmienne są zwierzątkami zaczynającymi się na k…)
Dziękuje Ci strasznie za Twoje uwagi dopiero zaczynam przygodę z C++ nie miałem żadnej styczności z C, sam się wszystkiego uczę i takie info jest dla mnie niesamowicie pomocne. Zaraz siadam i rozkminiam wektory…

PS. Co jest nie tak z c.math?

Miałem napisać:
math.h <-- biblioteka C, ale ponieważ C++ kompiluje też, poprawne kody C, ta biblioteka nadal jest obsługiwana. Jednak poprawnie w C++ to: cmath, bez rozrzerzenia *.h i z literką c dodaną na początku. Czyli:
#include <cmath>

Nie dokońca. C++ nie jest zgodny w 100% z C. Wielokrotnie próbując zbudować większe projekty napisane w C pod kompilatorem C++ miałem problemy, musiałem coś zmieniać.

źródło15
źródło21
źródło31

Dlatego też powinno się używać wyspecjalizowanych bibliotek C++. W C++17 podobno (nie potwierdzam jeszcze) doszło więcej niekompatybilności.

25 days later

Cześć, spoj nie zatwierdza mi programu. Czy mógłby ktoś pomóc mi w dostrzeżeniu mojego błędu?