Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Działania algebraiczne, zamiana nawiasów

Ostatnio zmodyfikowano 2018-01-09 14:28
Autor Wiadomość
Bercik97
Temat założony przez niniejszego użytkownika
Działania algebraiczne, zamiana nawiasów
» 2018-01-05 16:28:32
Witam, robię sobie zadanie ze spoja http://pl.spoj.com/problems/FR_04_04/ Sędzia nie chce mi zaakceptować kodu, zrobiłem kilka testów i we wszystkich output jest dobry, ktoś coś?
https://ideone.com/x8tY8q
C/C++
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 1000

int main()
{
    int t, i, j, m = 0, n = 0;
    char ch[ SIZE ];
    scanf( "%d", & t );
    for( i = 0; i < t; i++ )
    {
        scanf( "%s", ch );
        n = 0;
        m = 0;
        if( ch[ 0 ] == '|' )
             putchar( '(' );
        else
             putchar( ch[ 0 ] );
       
        for( j = 1; j < strlen( ch ); j++ )
        {
            if( m != 0 && n != 0 && m <= n + 1 && ch[ j - 1 ] == '|' && ch[ j ] == '|' )
                 putchar( ')' );
            else if( m != 0 && n != 0 && m >= n + 1 && ch[ j - 1 ] == '|' && ch[ j ] == '|' )
                 putchar( ')' );
            else if(( ch[ j - 1 ] == '+' || ch[ j - 1 ] == '-' || ch[ j - 1 ] == '|' ) && ch[ j ] == '|' ) {
                putchar( '(' );
                m++;
            }
            else if(( isalpha( ch[ j - 1 ] ) || isdigit( ch[ j - 1 ] ) ) && ch[ j ] == '|' ) {
                putchar( ')' );
                n++;
            }
            else
                 putchar( ch[ j ] );
           
        }
        printf( "\n" );
    }
   
    return 0;
}
P-168419
mateczek
» 2018-01-05 18:16:08
mi się wydaje taki algorytm trochę kłopotliwy do wymyślenia bo nie znam danych wejściowych jakiego są rodzaju. a przecież może być taki zapis
|2*|-x|+1|
I twój algorytm się sypnie bo nie sprawdza czy liczba nawiasów otwierających i domykających się zgadza.


mała uwaga:
C/C++
for( j = 1; j < strlen( ch ); j++ ) // staraj się nie sprawdzać długości łańcucha w każdym obiegu pętli !!!
P-168420
pekfos
» 2018-01-05 19:51:04
zrobiłem kilka testów i we wszystkich output jest dobry
To wymyśl własne testy. Jeśli nie umiesz znaleźć błędnych przypadków dla swojego algorytmu, to trochę mijasz się z celem robienia takich zadań.
P-168423
Bercik97
Temat założony przez niniejszego użytkownika
» 2018-01-06 00:17:14
Okej, dzieki za rady
P-168427
Bercik97
Temat założony przez niniejszego użytkownika
» 2018-01-09 13:31:36
@mateczek Chodzi tobie o to żeby nie pisać w warunku strlen() tylko przypisać wartość strlena jakiejś zmiennej i ją wstawić do warunku? Jak tak to dlaczego?
P-168525
mateczek
» 2018-01-09 14:23:39
ponieważ ta funkcja liczy elementy c-stringa. Jeśli będziesz liczył to z każdym obiegiem pętli tracisz na wydajności i przez coś takiego możesz mieć przekroczony limit czasowy na spoju.
Ostatnio kolega mi pokazał że foreach jest "szybsze" od for :). Chodziło mu o ten wątek. https://coderwall.com/p/il1tog​/php-for-vs-foreach-benchmark. Oczywiście ta różnica w wydajności wynika z błędu lub niedopatrzenia o którym tu mowa. Na spoju często liczy się czas !!! Stąd moja uwaga.

PS.
w cpp możesz użyć string.size(). Ale tam jest inna sprawa ta funkcja zwraca zmienną a nie liczy długość stringa na nowo. 
P-168526
Bercik97
Temat założony przez niniejszego użytkownika
» 2018-01-09 14:28:49
OK, rozumiem
P-168527
« 1 »
  Strona 1 z 1