小爱有一个奇怪的计数器。在第一个时刻计数器显示数字3,在接下来的每一个时刻,屏幕上的数字都会减1,直到减到1为止。
接下来,计数器会重置为上一个计数周期初始值的两倍,然后再每一个时刻减1。具体过程如下图所示:
找出规律,并打印出t时刻计数器的值。
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int t = sc.nextInt(); int temp = 3; int count = 3; int index = 0; int head = 0; if(t <= count){ if(t == 1){ System.out.println(3); }else if(t == 2){ System.out.println(2); }else{ System.out.println(1); } }else{ while(true){ if(t <= (count+2*temp)){ index = t - count; head = count + 1; break; }else{ temp = 2*temp; count = count + temp; } } System.out.println(count+4-index); } } }
可以看到每一组time和value相加的和是一样的,4、10、22、48...,且这些和之间的差依次为6、12、24...规律就出来了。
import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long t = Long.parseLong(br.readLine()); long sum = 4L, n = 6L; while (t >= sum) { sum += n; n *= 2; } System.out.println(sum - t); } }