10 / 14
Jan 2021

Sędzie wyrzuca mi cały czas błędną odpowiedź. Testowałem program różnorakimi ciągami liter i odpowiedzi wydawały się prawidłowe. Czy ktoś mógłby mi powiedzieć gdzie tu jest błąd?

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    int t;
    string s;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        int c=1;
        cin>>s;
        for(int j=0;j<s.length();j++)
        {
            if(s[j+1]==s[j])
            {
                c++;
                if(c==3) cout<<s[j];
            }
            else if(c>2)
            {
                cout<<c;
                c=1;
            }
            else if(s[j+2]!=s[j] && c==2)
            {
                cout<<s[j-1]<<s[j];
                c=1;
            }
            else
            {
                cout<<s[j];
                c=1;
            }
        }
        cout<<endl;
    }
    return 0;
}
  • created

    Oct '15
  • last reply

    Jan '21
  • 13

    replies

  • 2.4k

    views

  • 8

    users

  • 3

    links

Dzięki wielkie!
Małe niedopatrzenie z else if'em smiley
Już poprawione i zaakceptowane wink
Dzięki jeszcze raz!

1 month later

Mam podobny problem, ktoś pomoże?

#include <iostream>
#include <string>

using namespace std;

int ile;

int main()
{
    cin>>ile;
    std::string wyraz[ile];
    for(int k=0;k<ile;k++){
        cin>>wyraz[k];
    }
    for(int k=0;k<ile;k++){
    int j=2;
        for(int i=0;i<=wyraz[k].length()-1;i++){
        if(wyraz[k][i]==wyraz[k][i+1]&&wyraz[k][i]==wyraz[k][i+2]&&i==wyraz[k].length()-2){
            cout<<wyraz[k][i]<<j;
        }else if(wyraz[k][i]==wyraz[k][i+1]&&wyraz[k][i]==wyraz[k][i+2]){
            j=j++;
        } else if(wyraz[k][i]==wyraz[k][i+1]&&wyraz[k][i]!=wyraz[k][i+2]&&j>=3){
               cout<<wyraz[k][i]<<j;
               j=2;
        }else if(wyraz[k][i]==wyraz[k][i+1]&&wyraz[k][i]!=wyraz[k][i+2]&&j<3){
               cout<<wyraz[k][i]<<wyraz[k][i+1];
               j=2;
        }else if(wyraz[k][i]!=wyraz[k][i+1]&&wyraz[k][i]==wyraz[k][i-1]){
            j=2;

        }else cout<<wyraz[k][i];

    }cout<<endl;
    }

    return 0;
}
  1. std::string wyraz[ile]; -> string wyraz;
  2. Za dużo warunków, przez co kod jest mało czytelny. Rozwiązanie jest prostsze.
4 years later

Mam taki sam problem testowałem to wiele razy za kazdym razem dobry wynik, może ktoś coś doradzić ?

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

int main()
{
	int C;
	string wyraz;
	int dlugosc;
	int y;

	cin >> C;
	while (C < 1 || C>50) { cin >> C; }
	for (int i = 0; i < C; i++)

	{
		int base = 2;
		int licznik = 0;
		cin >> wyraz;
		dlugosc = wyraz.length();
		while (dlugosc > 200)  // sprawdzamy czy nie jest za długie 
		{
			cin >> wyraz;
			dlugosc = wyraz.length();
			y = dlugosc;
		}

		while (base-1<= wyraz.length())
		{


			if (wyraz[base - 2] == wyraz[base-1])
			{
				licznik++;
				base++;
			}
			else if (wyraz[base - 2] != wyraz[base-1])
			{
				if (licznik == 0)
				{
					licznik = 0;
					cout << wyraz[base - 2];
					base++;
				}
				if (licznik == 1)
				{
					licznik = 0;
					cout << wyraz[base - 3];
					cout << wyraz[base - 2];
					base++;
				}
				
				else if (licznik >= 2)
				{

					cout << wyraz[base - licznik];
					cout << licznik + 1;
					base++;
					licznik = 0;

				}
			}


		}



	}

	return 0;
}

> Blockquote

Brakuje tylko jednej rzeczy - znaku przejścia do nowej linii. Po tym jest zaliczane

9 months later

Dzień dobry,
to mój pierwszy post na forum. Wkręciłam się w programowanie podczas urlopu macierzyńskiego :wink: i zamiast spać programuję. Utknęłam na flamastrowym zadaniu. Bardzo proszę o pomoc. Testowałam wszystko co mi przyszło do głowy, wg mnie program działa, jednak sędzia odrzuca. Oto mój kod:
https://ideone.com/fc1OM513

Gratuluję macierzyństwa!

Ale jednak powinnaś dużo spać, aby twoje dziecko mogło wyssać podstawy informatyki z mlekiem matki.
Ale i fajnie, że programujesz, bo jak inaczej spełni się wcześniejsze zdanie?

Też powinienem już dawno spać, więc może tylko sennie majaczę? :
Więc testujesz, ale widocznie nieumiejętnie. Tylko przekierowanie wyjścia [wyniku działania programu] do pliku i potem dokładne obejrzenie go w edytorze/przegladarce hex pozwoli zobaczyć błąd - drukowanie znaku -> wyraz[i] gdy i = długość wyrazu - a to jest o jeden znak za daleko.

Przy okazji, Jeśli zaczynasz, przeczytaj koniecznie! <--kliknij w to proszę! zachęcam, powinnaś koniecznie przeczytać!

A także zapraszam do udziału:
XII edycja konkursu programistycznego “FRAKTAL” by Marcin Kasprowicz
Start konkursu: 16 stycznia o 12:00, do zobaczenia!
Pragnę zaprosić wszystkich pasjonatów algorytmiki na kolejną edycję konkursu programistycznego “FRAKTAL”, którą planujemy na 16 - 17 stycznia. Więcej informacji wkrótce. Adres konkursu: https://www.spoj.com/FRAKTAL/2

Oj tam oj tam,

Cały problem polega na tym, że to wcale a wcale nie chodziło i nie chodzi o spacje!

Ja nie widzę tu żadnego problemu, dopiero drukowanie - jak napisałem wyżej - jest problemem.

Porównaj i potestuj taki [fragment] programik:

string wyraz = "Witaj Swiecie";
int dl = 0;
while (wyraz[dl]) ++dl; 

Czy widzisz tu jakiś problem?

Przy okazji pytanie dla początkujących, czy ten fragment mógłby być użyteczny i co on mógłby robić - do czego można by go wykorzystać?

Dla zupełnie początkujących, inaczej zapisana pętla while:

while (wyraz[dl] > 0)
{
   dl++;
}