• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed zabawne dodawanie piotrusia (spojler)

Object Storage Arubacloud
0 głosów
347 wizyt
pytanie zadane 26 lipca 2017 w SPOJ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 27 lipca 2017 przez Jakub 0

witam, oczywiście tematem tego pytania będzie kolejny problem z kodem  :)

mianowicie od jakiegoś czasu rozwiązuje zadania z serwisu SPOJ . Niestety ,rzadko się zdarza żebym je rozwiązał bez poważniejszych problemów . Tym razem utknąłem na zadaniu pt "Zabawne dodawanie Piotrusia" . tu jest link : http://pl.spoj.com/problems/BFN1/

Problem jest jest taki że dla niektórych liczb program poprawnie wyznacza palindrom i ilość operacji by go osiągnąć

a dla innych liczy jakieś nie "stworzone rzeczy ". zdążyłem zauważyć iż kiedy program wykonuje tylko jedno dodawanie to jest w porządku a dla większej ilości odwrócona liczba ma jakieś "śmieciowe wartości" .

Bardzo bym prosił o nie podawanie już naprawionego kodu ale o naprowadzenie na błąd .

Z góry dziękuje za pomoc i proszę o litość za danie spojlera (inaczej nie wiedział bym jak to zrobić)  :)

a oto kod całego programu :

#include <iostream>
#include <sstream>
#include <iostream>
#include <string>

#include <conio.h> ///error dla eksperymentu gdzie jest blad

using namespace std;

string isConvert(int n) //konwersja z int do string
{
    ostringstream convert;
    convert << n;
    string n_str = convert.str();

    return n_str;
}

int isConvertToInt(string str) //konwersja ze string  do int
{
    int n;
    istringstream iss(str);
    iss >> n;

    return n;
}

int main()
{
    int t, n; //t - ilosc przypadkow , n - dana liczba

    cin>>t;

    for(int i=0; i<t; i++)
    {
        cin>>n; //wczytujemy liczbe

        string n_str = isConvert(n); //mamy kopi tej zmiennej we string
        bool palindrom = false; //warunek zakonczenia petli
        int counter = 0; //licznik poczatkowo na zero
        string n_str2; //odwrocona liczba w string
        int _n; //odwrocona liczba ale jako int



        do
        {
            if(n_str[0]==n_str[n_str.length()-1]) //jesli konie i poczatek liczby sa rowne to zakoncz iteracje...
            {
                palindrom = true; //dajac zmiennej bool wartosc true
            }
            else //jezeli ta liczba nie jest polindromem to...
            {
                for(int j=n_str.length()-1; j>=0; j--) //stwoz jej odwrocona wersje
                {
                    n_str2.push_back(n_str[j]);
                }
                if(n_str2[0]=='0')//usun zero jezeli jest na poczatko udwruconej wersji (to nie działa)
                {
                    n_str2.erase(0,1);
                }

                _n = isConvertToInt(n_str2); //konwertuje ja na int zecz jasna by byla gotowa do zsumowania z ta poprzednia

                cout<<n<<"+"<<_n<<endl; ///error  dodawanie zeby zobaczyc jak to przebiega i dalej nie mam pojecia co jest zle
                getch(); ///error

                n+=_n; //dodaj do n to droga liczbe (zsumuj je)
                n_str = isConvert(n); //by string mial swaja nowa wersie jako juz zsumowane liczby dla nastepnej iteracji
                counter++; //podaj ze musielismi wykonac kolejny krok
            }

        }
        while(palindrom!=true); //warunek zakonczenia petli while

        cout<<n<<" "<<counter<<endl; //wypisz polindrom i liczbe krokow by go uzyskac
    }
    return 0;
}

 

 

 

komentarz zamknięcia: Sam rozwiązałem problem
1
komentarz 26 lipca 2017 przez niezalogowany
Podaj jakieś zestawy danych dla których jest ok, a dla których nie
komentarz 26 lipca 2017 przez Jakub 0 Pasjonat (23,120 p.)
przywrócone 27 lipca 2017 przez Jakub 0
kiedy liczba z góry jest palindromem to jest ok (77, 6, 121) a po za tym jest dobrze dla np:

123  

 24

90    

5333  

80

 ->dla większości liczb (danych), zawsze tam gdzie jest wykonywana tylko jedna operacja dodawania

źle dla np:

578   

28

68  

3654

 -> tam gdzie trzeba dodać liczby do siebie więcej niż jeden raz
komentarz 27 lipca 2017 przez Jakub 0 Pasjonat (23,120 p.)
Dobra ,już jest ok . Nie wyczyściłem zmiennej n_str2 przed kolejną iteracją. Ale dzięki za chęć pomocy :)

Podobne pytania

0 głosów
1 odpowiedź 527 wizyt
pytanie zadane 20 lipca 2018 w SPOJ przez Piotr Błaszczak Bywalec (2,890 p.)
0 głosów
0 odpowiedzi 474 wizyt
pytanie zadane 10 września 2017 w SPOJ przez Józef Niecierski Początkujący (440 p.)
0 głosów
1 odpowiedź 256 wizyt
pytanie zadane 23 sierpnia 2017 w SPOJ przez seba Dyskutant (8,900 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...