Eryk17 Temat założony przez niniejszego użytkownika |
[c++] program stół - jakie wyjątki dodać? » 2016-01-10 16:10:07 hej. mam taki programik: http://main2.edu.pl/c/konkurs-wstepu-do-programowania/p/sto/ Dla przykładowych danych program działa ale dla innych danych: wiersz 1: wczytano '2', a oczekiwano '1' 1d wiersz 1: wczytano '6', a oczekiwano '3' 3a wiersz 1: wczytano '254', a oczekiwano '127' 3b wiersz 1: wczytano '250', a oczekiwano '126' 4a wiersz 1: wczytano '886', a oczekiwano '443' 4b wiersz 1: wczytano '2664', a oczekiwano '1333' 4c wiersz 1: wczytano '12', a oczekiwano '6' 7c wiersz 1: wczytano '40', a oczekiwano '0' 9b wiersz 1: wczytano '2', a oczekiwano '0' 10a wiersz 1: wczytano '2', a oczekiwano '1' kod: #include <iostream> using namespace std;
int main() { int a, b, c, i, j; cin >> a >> b >> c; i = 0; j = 0; while( a >= c ) { a = a - c; i++; } i *= 2; b = b - 2 * c; while( b >= c ) { b = b - c; j++; } j *= 2; int suma = i + j; cout << suma; };
Zakładam że brakuje mi jakiegoś wyjątku który decydowałby o tym czy trzeba mnożyć któreś krzesła lub tego nie robić tylko nie bardzo wiem który i gdzie? |
|
bathory0xff |
» 2016-01-10 16:42:46 Aby dostać poprawną odpowiedź najłatwiej znajdź wzór na krzesła. I przyjmij też inny punkt widzenia na ten stół tzn, według mnie najlepiej krzesła ustawiać po dwóch stronach ile się da i dopiero potem pozostałe 2 boki, wtedy najłatwiej zauważyć co i jak dla jakich danych. Wyrzuć przede wszystkim te pętle, zadanie opiera się na warunkach. Do maksa musisz rozważyć sytuację: -nie można pod stołem ustawić żadnych krzeseł. -krzesła można ustawić tylko z jednej strony (tej dłuższej oczywiście). -krzesła można ustawić z każdej strony. Do drugiego i trzeciego przypadku jest prosty wzór, trzeba tylko trochę pomyśleć. Powodzenia :D |
|
Eryk17 Temat założony przez niniejszego użytkownika |
» 2016-01-10 17:09:10 #include <iostream> using namespace std;
int main() { int a, b, c, i, j; cin >> a >> b >> c; i = 0; j = 0; while( a >= c ) { a = a - c; i++; } if( b >= 2 * c ) { i = i * 2; }; b = b - 2 * c; while( b >= c ) { b = b - c; j++; } if( a >= 2 * c ) { j = j * 2; }; int suma = i + j; cout << suma; };
dodalem warunek ktory ma sprawdzac czy drugi bok stołu jest większy niż dwie dlugosci krzesla bo musze je odjąć if( b >= 2 * c ) { i = i * 2; };
ale nadal nic to nie dalo |
|
bathory0xff |
» 2016-01-10 17:16:50 To da się zrobić o wiele prościej. Możesz stworzyć pomocnicze zmienne np x=a/k, y=b/k (przykładowe nazwy). Operując na nich możesz ułożyć już poprawne warunki. Widać już od razu np że pod stołem nie da się ustawić krzeseł. Kwestia poukładania tego. Co do twoich pętli to jest to dzielenie bez dzielenia :D. Naprawdę, one są niepotrzebne, zamiast nich o wiele szybciej robotę zrobi operator '/'. |
|
carlosmay |
» 2016-01-10 17:21:04 Testerka nie wymaga wykrywania żadnych wyjątkowych sytuacji typu ujemny wymiary stołu lub wymiary krzesła większe niż bok stołu. Wystarczy proste wyliczenie matematyczne. Dosłownie trzy linie kodu. |
|
bathory0xff |
» 2016-01-10 17:35:18 Testerka nie wymaga wykrywania żadnych wyjątkowych sytuacji typu ujemny wymiary stołu lub wymiary krzesła większe niż bok stołu. |
Z ciekawości napisałem sobie jeszcze raz ten program, są 2 lub 3 testy w których trzeba wypisać 0. |
|
Eryk17 Temat założony przez niniejszego użytkownika |
» 2016-01-10 17:36:04 jakie? z tego co wiem nie mogę odjąć pola krzeseł od pola stołu bo nie mogę włożyć całego krzesła z oparciem pod stół |
|
carlosmay |
» 2016-01-10 17:41:10 Nie interesuj się polem stołu tylko jego obwodem.
Z tego co widzę to włączasz kompa, odpalasz maina, łapiesz kilka zadań i jak nie idzie pół godziny powstaje temat. Spróbuj sam dojść do rozwiązania. Do każdego zadania jest odpowiedni materiał do przerobienia. Bez poświęcenia czasu i choćby próby zrozumienia tego materiału nauka na nic się zda. |
|
« 1 » 2 3 |