CSES - Weird Algorithm | Thuật toán lạ

Xem PDF

Điểm: 800 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Xét thuật toán sau nhận đầu vào là một số nguyên dương \(n\). Nếu \(n\) chẵn, thuật toán sẽ chia nó cho hai, và nếu \(n\) lẻ, thuật toán nhân ba nó lên rồi cộng thêm một đơn vị. Thuật toán trên lặp lại điều này cho tới khi \(n\) bằng \(1\). Ví dụ, dãy số thực hiện với \(n=3\) là:

\[3 \rightarrow 10 \rightarrow 5 \rightarrow 16 \rightarrow 8 \rightarrow 4 \rightarrow 2 \rightarrow 1\]

Việc của bạn là hãy mô phỏng lại cách hoạt động của thuật toán với một giá trị \(n\) cho trước.

Input

  • Một dòng duy nhất chứa số \(n\).

Output

  • In ra một dòng lần lượt chứa từng giá trị của \(n\) trong khi chạy thuật toán.

Constraints

  • \(1 \le n \le 10^6\)

Example

Sample input

3

Sample output
3 10 5 16 8 4 2 1


Bình luận


  • 0
    Avocadorable    8:18 p.m. 23 Tháng 2, 2024
    n = int(input())
    
    if n == 1:
        print(1)
    
    while n != 1:
        print(n, end=" ")
        if n % 2 == 0:
            n //= 2
        else:
            n = 3 * n + 1
        if n == 1:
            print("1")
    

    • -1
      peter    9:25 a.m. 20 Tháng 2, 2024

      n = int(input())
      if n>=1:
      print(n)
      if n<1:
      n = int(input())
      while n>1:
      if n%2==0:
      print(n//2,end=" ")
      n = n//2
      else:
      print(n3+1,end=" ")
      n = n
      3+1


      • -2
        PY1FLePhuocMinhHung    5:08 p.m. 8 Tháng 9, 2023

        Mình làm thế này mà bị Wrong Answer là sao nhỉ?
        a=int(input())
        for i in range(10**6):
        if a==1:
        print(1,end=" ")
        break
        else:
        if a%2==0:
        print(a//2,end=" ")
        else:
        print(a*3+1,end=" ")

        1 phản hồi

        • 1
          tk22dangminhduc    1:36 p.m. 21 Tháng 6, 2023

          giờ mới thấy dùng "long long" mới AC:|