每天打卡心情好(洛谷P1664题题解,Java语言描述)

题目要求

P1664题目链接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析

思路如下:

我们用一个变量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);
    }
}

发布了351 篇原创文章 · 获赞 610 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104018078
今日推荐