21 / 85
May 2012

Zadanie: pl.spoj.com/problems/JZLICZ/101
--
Główny problem w zadaniu:
wykorzystanie funkcji strlen();

-- kod usunięty --

  • created

    Dec '09
  • last reply

    Sep '23
  • 84

    replies

  • 5.1k

    views

  • 33

    users

  • 5

    likes

  • 15

    links

Frequent Posters

There are 84 replies with an estimated read time of 10 minutes.

Witam.
W pierwszym kodzie może zwiększ wielkość tablic z 25 na 26.
Mi liczy dobrze, ale czy sędziemu też, tego nie wiem. wink

Liczyć to liczy dobrze ale spoj i tak nie przyjmuje ;/ Właśnie jak wprowadzi się pusty wiersz to..?

Mi Twój program jakoś dobrze nie działa.
Musisz zmienić trzy rzeczy:
-usunąć jedną linijkę w kodzie - przeanalizuj kod i zobacz co Ci wypisuje i co usunąć, żeby to naprawić
-wypisać najpierw małe a potem wielkie litery
-wypisuj tylko litery (duże i małe)

    cin.ignore();
    for(int i=0;i<t;i++)
 ..........

Może tak: question

    for(int i=0;i<=t;i++)
 .........

U mnie pusty wiersz też liczyłem i było dobrze.

Nie, to nie to.
Skoro założyliśmy, że wypisujemy tylko litery, to entery nam nie robię różnicy, więc cin.ignore jest zbędny, ale nie jest błędem. smile

Strzelam.
Tu jest błąd ?
[bbone=cpp,3121]
for(int i=0;i for(int k=0;k<1000000;k++)
tab[i]=char(0);
[/bbone]

Strzał nr. 2.
Za duża tablica, bo w zadaniu jest max. 200 znaków w linii. question

Nie ma czegoś takiego jak "za duża tablica", jeśli Ci kompiluje program. smile
Może i strata miejsca, ale nie znaczy to, że SPOJ nie zaliczy programu.

Radzę nie strzelać, tylko np. komentować kolejne części programu, uruchamiać i patrzeć, jak i czy działa. wink

Marnotrawstwo to marnotrawstwo. confused
Oto ma ja wizja dla tego zadania -kod numer 1. smiley
1.)Duża tablica wystarczy max znaków + 1.
2.)Małe tablice ciut za małe.
3.)Tamto cin.ignore zbędne.
4.)Pętla przed getline -m zbędna.
5.)Jedna z dwóch pętli za getline-m zbędna.Potem trzeba poprawić wpisywanie do
tablicy.To z break-iem zbędne.
6.)Wypisywanie jest dobre.
Powodzenia.
Pozdrawiam.

Zgadzam się mniej więcej z wszystkim oprócz ostatniego punktu.

Ale znalazłeś główny błąd autora programu. ;-]
Nie pisz jednak, który to - niech autor sam pomyśli. wink

Bo kosmita jesteś. smile
Tablice indeksujemy od zera,czyli masz tablicę tab[26],czyli w pętli od zera do 25 (< 26),a Ty masz 27 i po kiego grzyba. smiley
Dalej napisałem jak masz zrobić.
Nic innego nie mogę zrobić,bo już bym za Ciebie rozwiązał zadanie. wink
Powodzenia.

Przeanalizowałem programik jeszcze raz:
na początku zeruje liczniki występowania liczb,
jak nie ma cin.ignore() po wprowadzeniu t pętla wynonuje mi się o 1 raz mniej
po każdym wprowadzeniu zeruje tablice żeby liczył tylko to co wprowadzę;
liczy i wypisuje poprawnie od a do z i A do Z nie liczy i nie wypisuje znaków '{' '[' @ ' - przed i po alfabecie.
Wiec nie wiem w czym mam błąd... Nawet jak w testach są dłuższe ciągi znaków to po zmienieniu tablicy i tak nie działa ;/
nie wiem, po prostu nie wiem gdzie błąd question confused

Och! unamused
Twój główny problem to te dwie pętle za getline-m.
Spróbuj to zrobić na jednej.
Wtedy jak pojawi się literka 'A' w tab to tablica du[tab[zmienna]-'A']++.
Tutaj też usunąłem kodzik. wink

W tym zadanku chodzi o alfabet od a do z - abcdefghijklmnopqrstuvwxyz i do A do Z - ABCDEFGHIJKLMNOPQRSTUVWXYZ ??
Napisałem dla jasności smile Czy poza tymi znakami ma jeszcze coś wyświetlać?

Usunięto.
Ale kosmos, jaka orka. smiley
Jak jeszcze nie ma ACC to pewnie chodzi o japońskie znaki. smiley
W for jest mały haczyk, pomyśl tylko. wink
Może jednak dam Ci znowu małą podpowiedź :badaj tyle znaków ile trzeba(wstaw gdzie trzeba "strlen" ,albo zrób inny wynalazek). wink

Wrzuciłem co zapodałeś, nic...
Zrobiłem w końcu program poprawnie i dlaczego nie acc, próbowałem już chyba wszystkiego przy sprawdzaniu... warunki itp... imp
To gdzie mam ten błąd jakaś pierdoła czy co bo ja nie mogę dojść co jest nie tak;/
W którym momencie wejście, sprawdzanie, czy wyjście??

1 month later

-- kod usunięty --

Nie zerowałem tablicy...
Dzięki.

Input:

5
G DEfs  HTR Jrt JTY kIU PyuOLYuHrsHg GAR awgTERT Gwe HrTWh WS
th dhgDTh sgD Rt S RT HrH H trHWSShWrHRTWRw jtyrW Ehr
W H hRT HT YiOOkjGpoknpO HN FkJN bfSHbFSTRHb XgfqerVd
EGAXWE wgeWEcEW gEVggr HEVgWSEYCF YEtCEVY eCve r
CRSevseyvRT yRT Yer yEW yerVCER yERVyt rb nuMOOLkjghfgDStQtBDF NB

Poprawny output:

a 1
b 4
c 1
d 2
e 9
f 4
g 12
h 8
i 1
j 3
k 5
n 2
o 1
p 2
q 1
r 14
s 4
t 9
u 3
v 3
w 4
y 8
A 2
B 2
C 5
D 5
E 15
F 4
G 5
H 15
I 1
J 3
L 2
M 1
N 3
O 6
P 1
Q 1
R 14
S 9
T 13
U 1
V 6
W 12
X 2
Y 7

Powodzenia. smile

2 years later

A co dla takiego testu Gosiu:

19 days later

Panowie i Panie,
Takim [bbone=cpp,811]AC
[/bbone]

kodem dostałem AC. Niech mi ktoś tylko wytłumaczy, dlaczego przy

otrzymywałem WA, dopiero (n+1) pomoglo?

Pozdrawiam

Nie wiem czemu, ale po co ci tam While? ja w tego typu sytuacjach stosuję for (int z=0;i<iloszest;i++) i działa bez zarzutu zarówno u mnie jak i przy sprawdzaniu. Przynajmniej w C++, ale tu pewnie też będzie dobrze.

4 months later

Zgadzam się z twoimi uwagami, ale z uwagi że kod mi ciągle nie wchodził pisałem w coraz bardziej "noobski" sposób, a i tak moja mina teraz jak go sprawdziłem ponownie nie do opisania smile

Dzięki.

1 year later

Podpinam sie do tematu.

Zrobiłem taki kod (wiem że brzydki i strasznie długi ale działa) tylko dostaję błąd odpowiedzi. Sprawdzałem dla wszytskich przykładów i wszytskich liter z alfabetu łacińskiego i jest dobrze.

#include <iostream>

Jak dostaje błędna odpowiedź jak wyniki sa takie same co w przykładzie?

W dodatkowym getlinie chodzi Ci o takie cos ??

#include <iostream>
19 days later

@marmal95:

Odpaliłem twój program i wcale nie działa poprawnie dla testów z zadania. Dla testów z zadania zwraca:

a 5
k 1
l 1
m 1
o 1
t 1

Przez twoje kombinacje z cin program źle wczytuje linie. Chodzi mi o linijki:

cin.sync();
cin.clear();

Poczytaj o cplusplus.com/reference/istr ... am/ignore/19

czy to na pewno jest program do tego zadania co w tytule ?, bo mój ma jakieś 20 linii i jeszcze można by go skrócić smile

więc na twój tylko spojrzałem i zrezygnowałem - napisz jeszcze raz, tak aby miał góra 30 linii, i oczywiście żadnych funkcji ani sort(), naprawdę nie są potrzebne

4 months later

Witam. Nie wiem co zrobiłem źle. Czy może jest to kwestia użycia getline? Program testy przechodzi ale na spoju dostaję "błędna odpowiedź".
[bbone=cpp,2179]
[ [narbej: po AC i nie tylko, nalezy kasowac swoj kod
[/bbone]

Dla przykładowego testu z treści zadania wypisujesz zły wynik - sprawdź na http://ideone.com34

Prawdopodobnie wpisujesz dane "z ręki" i wtedy błędu nie widać, ale tak SPOJ nie działa. Czy umiesz sobie wyobrazić, że ktoś tam siedzi i wpisuje dane wejściowe na klawiaturze do programu?

Nie wiem co to ideon. U mnie program wypisuje dobry wynik dla testu z zadania.

Dzięki ideone znalazłem rozwiązanie. Trzeba było zapętlić cin. Dziękuję i pozdrawiam.

10 months later

Witam, spoj wyświetla błędną odpowiedź. Pomoże ktoś, np w znalezieniu testu, dla którego mój program wyświetla złą wartość?
--wycięty kod--

Dowolny test zawierający duże Z, twój program je pomija. Niestety przekombinowałeś go tak że nie wiem dlaczego.

edit: znalazłem, w 2 miejscach masz < 51 zamiast <=. Jak już to poprawisz to usuń kod z forum bo będzie AC

2 months later

Witam. SPOJ nie chce zaakceptować mojego kodu (błędna odpowiedź), a pomimo usilnych prób i dużej ilości testów dalej nie jestem w stanie znaleźć błędu. Czy ktoś mógłby pomóc mi znaleźć błąd, podpowiedzieć co zrobiłem źle lub podać przykład testowy dla którego mój program wyrzuca błędną odpowiedź? Z góry dziękuję za pomoc.

-------KOD USUNIĘTY---------

Spójrz na tę pętlę:

i powiedz co w niej nie gra smile Jak do tego dojdziesz to będzie AC smile

Edit: zamiast cin.sync zastosuj cin.ignore.... ale to nie jest główny problem . Problem leży w pętli smile

Ok zaakceptowane, dzięki wielkie za pomoc smile . Swoją drogą szkoda, że w treści zadania nie było ujęte, żeby na końcu każdego wiersza była spacja, zwłaszcza, że nie ma to zdaje się wpływu na wynik końcowy. Jeszcze jedno pytanie bo nie do końca rozumiem - cin.sync(); użyłem gdy natrafiłem na problem z opuszczeniem inputu w pierwszym obrocie pętli i wyguglowałem podobny przypadek, po czym zastosowałem to u siebie w kodzie i zadziałało, ale dalej nie do końca kumam o co chodzi i czemu lepiej użyć cin.ignore(); mógłbyś mi przybliżyć ten temat (ew. podesłać miejsce gdzie jest to klarownie wytłumaczone)?

Witam wszystkich serdecznie, zadanie rozwiązałem kodem poniżej, jednak sędzie go nie przyjmuje. Jestem ciekawy co robię źle. Z góry dziękuje za podpowiedź smile

kod usunięty