小爱有一个奇怪的计数器。在第一个时刻计数器显示数字3,在接下来的每一个时刻,屏幕上的数字都会减1,直到减到1为止。
接下来,计数器会重置为上一个计数周期初始值的两倍,然后再每一个时刻减1。具体过程如下图所示:
找出规律,并打印出t时刻计数器的值。
输入描述:
输入为时刻t,一个整形数字。0<t<1e12
输出描述:
计数器显示的值。
思路:可以看出每一列的起始数字组成一个等比数列,
time可以看作是整个等比数列的前n-1项和,然后还有些特殊处理
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int i = scanner.nextInt(); calc(i); } } private static void calc(int t){ int time = 3; while (t > time){ t -= time; time *= 2; } System.out.println(time + 1 - t); } }