Weird Algorithm — (CSES)

Abhishek Raj
3 min readAug 1, 2021
  • Time limit: 1.00 s
  • Memory limit: 512 MB

Consider an algorithm that takes as input a positive integer n. If n is even, the algorithm divides it by two, and if n is odd, the algorithm multiplies it by three and adds one. The algorithm repeats this until n is one. For example, the sequence for n=3n=3 is as follows:

3→10→5→16→8→4→2→13→10→5→16→8→4→2→1

Your task is to simulate the execution of the algorithm for a given value of n.

Input

The only input line contains an integer n.

Output

Print a line that contains all values of n during the algorithm.

Constraints

  • 1≤n≤1061≤n≤106

Example

Input:
3

Output:
3 10 5 16 8 4 2 1

Java Solution :-

import java.io.DataInputStream;import java.io.FileInputStream;import java.io.IOException;import java.util.Arrays;import java.util.HashMap;class Main {public static void main(String[] args) throws IOException {Reader sc = new Reader();long t = sc.nextLong();System.out.print(t+" ");while(t!=1){if(t%2!=0){t=t*3+1;System.out.print(t+" ");}else{t= t/2;System.out.print(t+" ");}}// while(t-->0)// {// solve(sc);// }}static class Reader {final private int BUFFER_SIZE = 1 << 16;private DataInputStream din;private byte[] buffer;private int bufferPointer, bytesRead;public Reader(){din = new DataInputStream(System.in);buffer = new byte[BUFFER_SIZE];bufferPointer = bytesRead = 0;}public Reader(String file_name) throws IOException{din = new DataInputStream(new FileInputStream(file_name));buffer = new byte[BUFFER_SIZE];bufferPointer = bytesRead = 0;}public String readLine() throws IOException{byte[] buf = new byte[64]; // line lengthint cnt = 0, c;while ((c = read()) != -1) {if (c == '\n') {if (cnt != 0) {break;}else {continue;}}buf[cnt++] = (byte)c;}return new String(buf, 0, cnt);}public int nextInt() throws IOException{int ret = 0;byte c = read();while (c <= ' ') {c = read();}boolean neg = (c == '-');if (neg)c = read();do {ret = ret * 10 + c - '0';} while ((c = read()) >= '0' && c <= '9');if (neg)return -ret;return ret;}public long nextLong() throws IOException{long ret = 0;byte c = read();while (c <= ' ')c = read();boolean neg = (c == '-');if (neg)c = read();do {ret = ret * 10 + c - '0';} while ((c = read()) >= '0' && c <= '9');if (neg)return -ret;return ret;}public double nextDouble() throws IOException{double ret = 0, div = 1;byte c = read();while (c <= ' ')c = read();boolean neg = (c == '-');if (neg)c = read();do {ret = ret * 10 + c - '0';} while ((c = read()) >= '0' && c <= '9');if (c == '.') {while ((c = read()) >= '0' && c <= '9') {ret += (c - '0') / (div *= 10);}}if (neg)return -ret;return ret;}private void fillBuffer() throws IOException{bytesRead = din.read(buffer, bufferPointer = 0,BUFFER_SIZE);if (bytesRead == -1)buffer[0] = -1;}private byte read() throws IOException{if (bufferPointer == bytesRead)fillBuffer();return buffer[bufferPointer++];}public void close() throws IOException{if (din == null)return;din.close();}}}

--

--