题目要求
分析
思路如下:
我们用一个变量zero_num
标记当前1之前的0个数,这是因为题目要求说明了在遇到1的时候“清算”累计打卡天数,而不是每次都清算。
我们用一个变量counter
来记录当前的当前累计天数,是可以减少但不能变为负数的。
还有一个变量result
来记录累计的总打卡数,不能减少,是我们所求的最终结果,具体算法规则是有累计到一定程度后会改变的。
AC代码
import java.util.Scanner;
public class Main {
public static int getReward(int counter) {
if (counter < 3) {
return 1;
} else if (counter < 7) {
return 2;
} else if (counter < 30) {
return 3;
} else if (counter < 120) {
return 4;
} else if (counter < 365) {
return 5;
} else {
return 6;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int zero_num = 0, counter = 0, result = 0;
for (int i = 0; i < num; i++) {
int now = scanner.nextInt();
if (now == 1) {
if (zero_num != 0) {
counter -= Math.pow(2, zero_num-1);
zero_num = 0;
if (counter < 0) {
counter = 0;
}
}
counter++;
result += getReward(counter);
} else { //0
zero_num++;
}
}
scanner.close();
System.out.println(result);
}
}