Funkcja generująca ciąg liczb zależnie od warunku

0

Hej, czy ktoś miałby radę jak sprawić by to:

#include<iostream>

using namespace std;

int main()
{
	int n;
    
    for(;;)
    {
    cout<<"Podaj liczbe:" <<endl;
    cin>> n;

    
    while ((n/2 >= 1) && ((n * 3)+1 >= 1))
    {
    if (n % 2 == 0)
    {
          n = n/2;
          cout <<n;

          {
           cout<<""<<"\n";
          }
          if (n == 1)
          break;
    }
    if (n % 2 != 0)
    {
          n = (n * 3)+1;
          cout<<""<<n;
		  {
	       cout<<""<<"\n";
	}
		  if (n == 1)
          break;
    }
    }
    
return 0;
}
}

wyglądało tak: (dla n=10)

1, 10, parzyste, 5
 2, 5, nieparzyste, 16
 3, 16, parzyste, 8
 4, 8, parzyste, 4
 5, 4, parzyste, 2
 6, 2, parzyste, 1 
0

Można prościej, dokładnie przepisać warunki gry:

#include<iostream>
 
using namespace std;
void game(int n){
	while (1){
		if (n % 2 == 0){
			n /= 2;
			cout << "even "<<n<<endl;
			if (n == 1) break;
			}
		else {
			n = n * 3 + 1;
			cout << "odd "<< n << endl;
			if (n == 1) break;
			}	
		}
	} 
 
int main(){
	game (10);
	}
1

@dzidek161: główna pętla powinna wyglądać inaczej, bo nie informuje o faktycznym warunku działania pętli. W Twoim zadaniu pętla ma działać, jeśli n jest większe od 1, więc od tego zacznij:

while(n > 1){

Następnym krokiem jest wyświetlenie numeru iteracji, co nie jest zależne od wartości n. Zadeklaruj zmienną pomocniczą, nadaj jej początkową wartość, w pętli ją inkrementuj i wyświetl na ekranie. Kolejnym krokiem jest wypisanie n, więc sprawdź w warunku czy jest parzysta i wyświetl ją oraz jej opis (parzysta lub nieparzysta). Następnie dokonaj obliczenia nowej wartości dla kolejnej iteracji, więc pozostając w warunku, wykonaj obliczenia na podstawie odpowiedniego wzoru. Ostatnim krokiem jest wyświetlenie nowego n – jest to niezależne od warunku, więc odpowiedni kod umieść poza nim (nie zapomnij o endl).

0

Przepraszam, że o to proszę, ale jesteś w stanie to wykonać? Do oddania zadania zostało mi 30 minut, a jestem pewien, że sam nie dam rady zdążyć. Postaram się w 100% przeanalizować ten program, by wiedzieć te rzeczy w przyszłości.

0

Chyba żartujesz… Nie wiem co tam zaliczasz i z czego to zadanie robisz, ale skoro masz je oddać, to musisz je wykonać sam. Wszystko co potrzebne do realizacji tego programu zawarłem w swoim poście.


Edit: times up! ;)

#include <iostream>

int main()
{
  int n;
  int i = 1;
  
  std::cout << "Podaj liczbe: ";
  std::cin >> n;
  
  while(n > 1)
  {
    std::cout << i++ << ", " << n << ", ";
    
    if(n & 1)
    {
      std::cout << "nieparzyste, ";
      n = 3 * n + 1;
    }
    else
    {
      std::cout << "parzyste, ";
      n /= 2;
    }
    
    std::cout << n << std::endl;
  }
}

http://cpp.sh/96nr

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