Nie mam pomysłu już co może być źle. Byłbym wdzięczny za pomoc, https://ideone.com/N1STJ017, działa dzięki;
@oskarr_08
cos nas oszukujesz, twierdzisz ze dziala.
na dwa strumienie wejscia masz tylko jeden strumien wyjscia. Sprawdz prosze jeszcze raz kod, I czy wszystkie warunki sa spelnione.
Witam, wymyśliłem taki kod: http://ideone.com/Dpz9ES8
Jak widać na załączonym obrazku, dobrze wskazuje litery i ich ilość, jeśli jest ich więcej niż 3, nie mam kompletnie pomysłu jak sprawić aby pokazywało resztę… Jakby ktoś mógłby pomóc byłbym bardzo wdzięczny
Mam wrażenie, że trochę się nie zrozumieliśmy.
Jeśli na wejściu wpiszę np.:
AABBBCCCCEEDDDDDDDCC
to na wyjściu w moim programie otrzymam:
B3C4D7
a powinienem otrzymać AAB3C4EED7CC i właśnie nie mam pomysłu jak wypisywać zmienną “napis” od początku do momentu, w którym natrafimy na przynajmniej trzy takie same litery, później od trzech takich samych liter do kolejnych trzech takich samych liter i później jeśli już nie natrafimy na trzy kolejne takie same litery, to żeby wypisało resztę zmiennej “napis” do końca.
Powiem szczerze, że inspirowałem się tym linkiem: Flamaster i wykonałem trzy pierwsze podpunkty z 4, o których pisałeś i nie mam pomysłu jak poprawić czwarty.
@narbej Można zrobić wszystko bez else if
No właśnie trochę bałaganu mi się wprowadziło teraz
Mam ustawione int k = 1, zmieniłem if (k>=2) na if (k>2), zmieniłem k+1 na k (tak, domyśliłem się, że trzeba to zmienić ) . Wszystko pozostałe zostawiłem bez zmiany.
Też mi się wydaje, że else if w tym momencie nie jest potrzebne bo jeżeli k nie będzie się równało przynajmniej 2 to znaczy, że w napisie nie występują trzy litery czyli poprostu wpiszę cout<<napis.
Tylko że dalej nie rozwiązuje mi to problemu z niepojawianiem się pozostałych liter poza tymi z cyframi (tylko wtedy gdy napisie są 3 litery po kolei, w else planuję tak jak wyżej napisałem wpisać cout<<napis).
Zastanawiałem się nad wpisaniem np. czegoś takiego: cout<<napis[i, 200] (czyli, żeby wypisywało od i-tego znaku do 200-znaku)
Co właściwie daje mi to, że w nawiasie kwadratowym wpiszę dwie liczby po przecinku?
Bo jeżeli napiszę np. napis[0] to pojawi mi się tylko pierwsza litera, którą wpiszę.
Edit/ Jednak nie wystarczy wpisać cout<<napis przsy else, bo wtedy mi się powtarza napis tyle razy ile znaków ma napis (pętla for), jeżeli wywalę else poza pętlę to nie mogę tego użyć bo nie ma poza pętlą wcześniej if-a, a z kolei jeżeli wywalę if-a poza pętlę to nie mogę go użyć bo pętla zawiera int i=1…
Masz dwa wyjścia, a właściwie dużo więcej, ale tyle jest moich propozycji.
- Walczysz dalej …
- Wiem, że to nie najlepszy pomysł i że nie powinienem tego robić, ale klikasz i oglądasz propozycje rozwiązania - niepełne - aby nie kusiło innych do wklejania gotowego kodu AC. Mimo to proszę, każdego czytającego o próbowanie samodzielnie rozwiązać, zanim sięgniesz po gotowe rozwiązanie.
a) http://ideone.com/HSNtj68
b) widać, że w kodzie a) wypisywanie [cout << napis[i-1]] jest powtarzane w każdym z 3 przypadków, więc można: http://ideone.com/BPkWdK3 ostatnie else jest w tym wariancie zbędne.
c) bez if’a: http://ideone.com/Y3vp8E5
Nie zagłębiałem się za bardzo w kody, które wstawiłeś wyżej, właśnie tak jak napisałeś lepiej samodzielnie rozwiązać i w końcu mi się udało
Generalnie jest wszystko to co było, program zrobiłem na 3 if-ach.
Ustaliłem, że nie ma sensu robić z else if, bo np. dla takiego wejścia:
AAABB
pokaże mi tylko
AAA (dla k>2, tak jak było wyżej)
ponieważ if się wykona.
A te if-y wyglądają tak: http://ideone.com/NXXhH63
W sumie dopiero pisząc to przeanalizowałem te twoje kody i mój jest bardzo podobny do twojego podpunktu a)
Dzięki bardzo za pomoc
Cześć!
Mimo licznych analiz kodu, nie potrafię zrozumieć, dlaczego sędzia ciągle zwraca “błędną odpowiedź”
Proszę o wskazówkę!
#include<stdio.h>
int main (){
int n;
scanf("%d", &n);
int i = 0;
int j = 0;
char tab[51][201];
for(; i<n; i++)
scanf("%201s", tab[i]);
i = 0;
int ccount = 1;
char akt, nast;
for(; i< n; i++){
while(tab[i][j] != '\0'){
akt = tab [i][j];
nast = tab [i][j+1];
if(j==0)
printf("%c", tab[i][j]);
if(akt == nast)
ccount++;
else{
if(ccount == 1){
printf("%c", nast);
}
else if( ccount == 2){
printf("%c%c", akt, nast);
ccount = 1;
}
else{
printf("%d", ccount);
ccount = 1;
printf("%c", nast);
}
}
j++;
}
printf("\n");
j = 0;
}
return 0;
}
Pytanie powinno raczej brzmieć, a co robisz, gdy zmienna nast równa jest ‘\0’?, bo tak jest!
Po prostu drukujesz ją, a przy “zwykłym” testowaniu nie widzisz na ekranie, że drukujesz zero. Musiałbyś tetować, zapisując wynik do pliku, a potem oglądać go w jakimś edytorze hexs, lub używać debugera.
Ponieważ i tak twój kod jest niezbyt “ładny” więc po prostu, wszędzie gdzie drukujesz zmienną nast, dodaj wcześniej warunek:
jeżeli nast != '\0' drukuj nast
Kod będzie jeszcze mniej “ładny” i mniej czytelny, ale jeżeli zrobisz to dobrze dostaniesz AC.
Witam, nie dawno zacząłem pisać algorytmy na spoju, i napisałem taki programik, sędzia wywala że błędna odpowiedź, te przykładowe testy dobrze pokazuje, jakieś moje także, nie wiem co tu jest nie tak.(przy zmianie wyświetlania danych poprzez dodanie całej linii do stringa, a na końcu wyświetlenie go, także spoj nie chce przyjąć).
Witam,
Przez ideone przechodzi moj kod Java. Problem wydaje się ze skannerem, ponieważ gdy tylko usuwam komentarze już kompilator go nie przepuszcza. W innych zadaniach tez miałem problem ze scannerem, jak robię w javie. Testy przykladowe przechodzi i w konsoli wyswietlaja mi się poprawne dane. Wie ktoś może gdzie jest błąd, może coś przeoczyłem, ale źle podszedłem do zadania?