1 / 7
Mar 2017

Czy mógłby mi ktoś napisać dlaczego sędzia nie zalicza mi tego zadania skoro program daje właściwy wynik?

include

include

using namespace std;

int N;
string alfabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", zdanie;

unsigned int ZLI(string z, char a)
{
int ile=0;
for(int i=0; i<z.length(); i++)
{
if(z[i]==a) ile++;
}
return ile;
}

int main()
{
cin>>N; if(N>150||N<1) exit(0);

for(int j=0; j<=N; j++)
{
	getline(cin,zdanie); if(zdanie.length()>200) exit(0);

	for(int i=0; i<52; i++)
	{
		int ile=ZLI(zdanie,alfabet[i]);

		if(ile>0) cout<<alfabet[i]<<" "<<ile<<endl;
	}
}
return 0;

}

  • created

    Mar '17
  • last reply

    Apr '17
  • 6

    replies

  • 568

    views

  • 5

    users

  • 3

    links

wskazane jest przekazywanie kodu poprzez link do ideone.com7
tam też można przetestować program

a czy sprawdziłeś wynik dla podanego testu w zadaniu ? - bo zanim napisze się tu post, to należy to sprawdzić, i kilka innych testów też warto sprawdzić, a potem jeszcze raz należy dokładnie przeczytać treść zadania

Jeśli już decydujesz się sprawdzać poprawność wejścia, to warto program kończyć z niezerowym kodem wyjścia gdy okaże się że wejście nie spełnia warunków zadania (używając np. makra assert, albo exit(1)). Zaletą takiego rozwiązania jest możliwość odróżnienia tej sytuacji, od zwykłej błędnej odpowiedzi udzielonej przez program. Niestety, ale sporadycznie zdarzają się problemy z błędnym wejściem, w szczególności pośród nowych problemów.

Generalnie jednak, jeśli spełnienie danego warunku nie ma wpływu na poprawność zaimplementowanego algorytmu to celowość sprawdzenia jest raczej niewielka. Przykładowo, długie zdania nie sprawią powyższemu algorytmowi większych problemów (aż do długości INT_MAX przy której zaczynają się dziać dziwne rzeczy).

Wracając do meritum to problematycznie wygląda wypisywanie częstości liter po każdym zdaniu. Powinno to nastąpić raz po przetworzeniu wszystkich zdań.

Dzięki za przydatne wskazówki. Ze SPOJa korzystam od niedawna dlatego nie wiedziałem o ideone.com.

11 days later

Tak :wink:

PS
Twój program, jest żywym przykładem, do czego prowadzi tzw technika copy-paste.
Proponuję zapomnij o takim pisaniu i po prostu przemyśl jeszcze raz zadanie. Przy okazji, ewentualnie zmień źródło nauki programowania, bo podejrzewam, że korzystasz ze złego.

PS 2
Nauka alfabetu, to I klasa?

PS 3
Inne wątki na temat tego zadannia to np: http://discuss.spoj.com/search?q=zliczacz%20liter

Bardzo interesujące rozwiązanie - przykład, gdy pracowitość przeważa nad myśleniem - a jeszcze, gdy pomyślę o takim rozwiązaniu dla zadania z alfabetem chińskim :slight_smile: