zadanie programowanie

0

#include <iostream>

bool rytual( int x, int & k, int & l ) {
while( x > 1 ) {
if(( k + l ) == 15 ) {
return false;
}
if( x % 2 == 0 ) {
k++;
x /= 2;
}
else {
x = 3 * x + 1;
l++;
}
}
if( x == 1 ) {
return true;
}
}

int main() {
int x;
while( x != 0 ) {
int kwiaty = 0, liscie = 0;
std::cin >> x;
if( rytual( x, kwiaty, liscie ) == true ) {
std::cout << "TAK" << " " << kwiaty << " " << liscie << std::endl;
}
else if( rytual( x, kwiaty, liscie ) == false && x != 0 ) {
std::cout << "NIE" << std::endl;
}
}
return 0;
}
Ktoś mi powie co jest źle w tym kodzie?

Zadanie :

Znany podróżnik Antonio przebywając wśród Indian Ameryki Południowej zapoznał się z rytuałem ułatwiającym szamanom wejście w trans. Szaman zasiada przy ognisku i określa magiczną liczbę x. Następnie, jeśli x jest liczbą parzystą, to szaman dorzuca do ogniska garść kwiatów i dzieli x przez 2. Jeśli natomiast x jest nieparzyste, to do ogniska dorzuca garść liści i oblicza wartość 3x+1. Te operacje należy powtarzać dla otrzymywanych kolejno wartości do czasu kiedy x będzie równe 1.
Antonio zastanawia się, dla jakich wartości x rytuał zostaje zakończony po co najwyżej 15 krokach. Chciałby też wiedzieć, ile kwiatów i liści potrzeba do wprowadzenia szamana w trans. W związku z tym poprosił programistów o zaimplementowanie funkcji, która dla zadanej wartości x odpowie na pytanie, czy rytuał zakończy się po najwyżej 15 krokach, i jeśli tak, to poda także liczbę zużytych garści kwiatów i liści.

Wejście

Wejście zawiera co najwyżej 20 testów. Każdy test składa się z jednej liczby naturalnej x z zakresu od 2 do 100. Ostatnią liczbą wejścia jest zawsze 0.

Wyjście

Dla każdego testu należy w osobnej linii wypisać słowo "TAK", jeśli rytuał zakończy się po co najwyżej 15 krokach, lub "NIE" w przeciwnym przypadku. Jeśli odpowiedź brzmi "TAK", należy w tej samej linii wypisać także liczbę zużytych w rytuale garści kwiatów i garści liści.

Przykład

Wejście:

7
10
0

Wyjście:

NIE
TAK 5 1

0

Oprócz tego że okropnie zagmatwałeś bardzo prosty kod - wszystko ok.

0

no własnie wychodzi mi blad kompilacji...

0

Pewnie masz nieodpowiedni kompilator.
Podaj treść błędu i wskaż w którym to wierszu.

0

http://ideone.com/jGYIAf
No ale kompilator przecież podpowiada co jest nie tak.

std::cout < "TAK" << " " << kwiaty << " " << liscie << std::endl;
         ^
     za mało <
 

Bez czytania co wypluwa kompilator daleko się nie zajedzie :p

0

dzięki :D

0

hmm poprawione tez jest błąd kompilacji wiec nie wiem juz co jest..;/

0

No to wrzuć ten błąd i napisz jakiego kompilatora używasz

0

Może z nudów ...

#include <iostream>
using namespace std;

int main()
  {
   for(int x,leaf,count;(cin>>x)&&(x);)
     {
      for(count=leaf=0;(x>1)&&(++count<=15);x>>=1)
        {
         if(x&1)
           {
             x+=5*x+2;
             ++leaf;
           }
        }
      if(x==1) cout<<"TAK "<<(count-leaf)<<' '<<leaf<<endl;
      else cout<<"NIE"<<endl;
     }
   return 0;
  }
0

teraz mam zla odpowiedz, a nie zmienilam nic tylko poprawilam nawiasy. Co jest zle, pomoze ktos?

1 użytkowników online, w tym zalogowanych: 0, gości: 1