Działania algebraiczne, zamiana nawiasów
Ostatnio zmodyfikowano 2018-01-09 14:28
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 #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; }
|
|
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: for( j = 1; j < strlen( ch ); j++ )
|
|
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ń. |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2018-01-06 00:17:14 Okej, dzieki za rady |
|
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? |
|
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. |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2018-01-09 14:28:49 OK, rozumiem |
|
« 1 » |