Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

pomoc w zadaniu x2


Rekomendowane odpowiedzi

Opublikowano

czesc, to znowu ja, i znowu mam problem z zadaniem ...

 

tresc:

 

W tym roku na rynku w Lipnicy Murowanej, na którym ustawiane są do
konkursu palmy, rozegrały się dramatyczne dla uczestników konkursu
wydarzenia: złamało się kilka największych palm. Regulamin konkursu
przewiduje bowiem, że palmy konkursowe, ważące ok. 100 kilogramów,
powinny być ustawione ręcznie, bez pomocy dźwigów i innych urządzeń
mechanicznych.

"Rozumiejąc tragedię twórców, jury po raz pierwszy w historii ustanowiło nową kategorię „palma złamana"

Twoim zadaniem jest przygotowanie programu który pozwoli na szybką ocenę wysokości  na której złamała się palma.

 

O palmie wiadomo ze w całości gdyby się nie złamała  miała  H
metrów wysokości. Po złamaniu wierzchołek dotknął ziemi w odległości D
metrów od podstawy. Na jakiej wysokości się złamała?

Wejście

W pierwszym wierszu standardowego wejścia zapisano dwie wielkości
całkowite H (5 <= H <= 2 000 000) i D (2 <= D <= 1 999 999)
oddzielone spacją.

Wyjście 

W jedynym wierszu standardowego wyjścia zapisz, na jakiej wysokości w
metrach nad ziemią została złamana trzcina bambusowa. Wynik zapisz z
dokładnością do dwóch miejsc po kropce.

Przykład

Dla danych

32 16

 

poprawna odpowiedź to

12.00

 

moj kod:

 

#include <iostream>
#include <math.h>
using namespace std;

/*
-------------------------------------------------
z == wysokosc calej palmy
c == odleglosc miedzy zlamaniem a ziemia
x == wysokosc zlamania palmy
y == dlugosc palmy, ktora zlamala sie na gorze

------------------------------------------------
*/


int main ()
{
unsigned long long int c,z;
double x,y;
cout.precision(2);

cin>>z>>c;

y = (c*c + z*z) / (2*z);
x = sqrt((y*y)-(c*c));

cout<<fixed<<x;
return 0;



}

 

1 probe przechodzi, lecz kolejne 4 nie. prosze o pomoc :D

4ieVbpu.png
Opublikowano

zmienilem na x = z-y i nadal 1 probe przeszlo, kolejne juz nie. zmienne nazwalem tak, a nie inaczej, bo sobie rozpisalem to wszystko na kartce, namalowalem trojkat, no i nie chcialem sie potem pomylic :D

4ieVbpu.png
Opublikowano
#include <iostream>

using namespace std;

int main()
{
    int H, D;

    cin >> H >> D;

cout.precision(2);
for(double i=0; i < H; i+=0.00001) {
if(i*i - (H-i)*(H-i) - D*D < 0.001 and i*i - (H-i)*(H-i) - D*D > 0) {
cout << H-i;
break;
}

}
    return 0;
}

 

spróbuj to.

 

Mało optymalne, lecz jestem za słaby by wymyślić coś lepszego;)

 

btw na twoim miejscu zadałbym te pytanie na jakimś portalu zwiazanym z matematyka.

Pisze boty do gier WWW na zlecenie.

Opublikowano

ta petla wykonuje sie ledwo dla przykladu 32 16, a gdy dam np 320 160 to juz brakuje czasu na ideone xD nie wiem dlaczego moj algorytm dla malych liczb jest dobry, ale dla duzych juz wywala bledy :<

4ieVbpu.png
Opublikowano

dla dużych tzn?

bo wiesz, że wykonujesz działanie x^2 i latwo o overflow

 

a metin dojebal po calości xD

 

OMG teraz zauważyłem, że używasz double...

Zmien typ na u long long i wyświetlaj liczbę << ".00"

na double dostajesz niedokładne wyniki, bo im większa liczba tym mniejsza dokładność.

Opublikowano
#include <iostream>
#include <math.h>
using namespace std;

/*
-------------------------------------------------
z == wysokosc calej palmy
c == odleglosc miedzy zlamaniem a ziemia
x == wysokosc zlamania palmy
y == dlugosc palmy, ktora zlamala sie na gorze

------------------------------------------------
*/


int main ()
{
unsigned long long int c,z,x,y;


cin>>z>>c;

cout.precision(2);
cout<<fixed<<(z - (((c*c + z*z) / z)/2));
return 0;



}

zrobilem takie cos, ale nie wiem jak tutaj ten no, dodac te przecinki, bo nie wychodza xD

 

i dalej 1 proba ok, reszta nie XDD

macie jakies pomysly? xD czas mam do 23:55 no ale chcialbym wczesniej to wyslac zeby nie zyc w niepewnosci xD

4ieVbpu.png
Opublikowano

napisałem ci przeciez

 

int main ()
{
unsigned long long int c,z,x,y;
cin>>z>>c;
cout<<(z - (((c*c + z*z) / z)/2)) << ".00"; //przecinek czy kropka to juz zalezy jak łapie
return 0;
}
 
Opublikowano

No to jeśli wychodzą takie wyniki to nie ma możliwości, żeby to na double zrobić dokładnie.

Możesz spróbować jeszcze long double, ale wątpię, że to coś zmieni, bo przeważnie to to samo

 

te zadania są chujowe według mnie

 

btw. jeszcze się dopatrzyłem, że wynik przecież jest zawsze i tak int (nawet w pierwszym przykładzie), więc spróbuj tego

#include <iostream>
#include <math.h>
using namespace std;

/*
-------------------------------------------------
z == wysokosc calej palmy
c == odleglosc miedzy zlamaniem a ziemia
x == wysokosc zlamania palmy
y == dlugosc palmy, ktora zlamala sie na gorze

------------------------------------------------
*/


int main ()
{
unsigned long long int c,z;
long double x,y;


cin>>z>>c;

cout.precision(2);
y = double(c*c + z*z) / (2*z);
x = (double)z-y;
cout<< x;
//cout<<fixed<<(z - (((c*c + z*z) / z)/2));//czy to na pewno dobrze zrobiles?
return 0;
}

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...