Zadanie z dzieleniem liczby aż do osiągnięcia 1

0

czesc

mam takie zadanko
Napisz program, który dokona obliczeń zgodnie z algorytmem. Zaczynamy od dowolnej liczby całkowitej n. Jeżeli n jest parzyste to dzielimy je przez 2 w przeciwnym wypadku mnożymy przez 3 i dodajemy 1 (3n+1). Obliczenia powtarzamy dla kolejnej wartości n. Kończymy, gdy wartość n osiągnie 1, czyli dla n=1.
W odpowiedzi proszę wyświetlić kolejne wartości n oraz ilość cykli.
Przykład:
n=10
ciąg: 10 5 16 8 4 2 1
odpowiedź: 6 cykli.
i napisany kod, ale mam problem z wyswietleniem tego ciągu n. wie ktos jak to zrobic?
to moj kod poki co

#include <stdio.h>
int main() {
int n;
int cykle=0;
printf("podaj liczbę całkowitą: ");
scanf("%i", &n);
while(n>1){ //program nie zadziała dla liczb mniejszych lub równych 1
if(n%2 == 0){
printf("liczba %i jest parzysta\n", n);
printf("n/2 = %i\n", n/2);
n=n/2;
}
else{
printf("liczba %i nie jest parzysta\n", n);
printf("3n+1 = %i\n", 3n+1);
n=3n+1;
}
cykle+=1;
}
printf("liczba cykli: %i \n", cykle);
return 0;
}
1

Na początek dwie prośby:

  1. proszę sformatuj kod używając ```
  2. zdecyduj się czy to jest C czy C++. To są dwa rózne języki programowania i tylko z powodu błędu historycznego są w jednej kategorii razem

UPDATE ty ten kod na kartce wcześniej pisałeś i nie kompilowałeś? przecież 3n się nie skompiluje ani w C ani w C++

2

Od razu mówię że nie umiem w C:

#include <stdio.h>
int main() {
  void fun(int n) {
    printf("n=%i\nciąg:", n);
    int very_fun(int counter, int n) {
      int new_n = (n % 2) ? 3 * n + 1 : n /2;
      printf(" %i", new_n);
      return new_n <= 1 ? counter : very_fun(counter + 1, new_n);
    }
    printf("\nodpowiedź: %i cykli.", very_fun(1, n));
  }
  fun(10);
}

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