小爱有一个奇怪的计数器。在第一个时刻计数器显示数字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);
}
}