蓝桥杯-刷题统计

举报
别团等shy哥发育 发表于 2023/04/04 23:01:13 2023/04/04
【摘要】 @toc 1、问题描述小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题? 输入格式输入一行包含三个整数 a,b 和 n. 输出格式输出一个整数代表天数。 样例输入10 20 99 样例输出8 评测用例规模与约定对于 50% 的评测用例, 1≤a,b,n≤1061\...

@toc

1、问题描述

小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?

输入格式

输入一行包含三个整数 a,bn.

输出格式

输出一个整数代表天数。

样例输入

10 20 99

样例输出

8

评测用例规模与约定

对于 50% 的评测用例, 1 a , b , n 1 0 6 1\le a,b,n\le 10^6 .

对于 100% 的评测用例, 1 a , b , n 1 0 18 1\le a,b,n\le 10^{18}

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

2、解题思路

第一种方案(这种会超时):周一到周五每天做a道题,周六周天每天b道题,直接累加就行,周内就+a,周末就+b,最后输出总数就行。

经过测试,第一种只有60%的用例可以通过,后面都超时了。

第二种方案:第一种相当于有多少天就要加多少次,太慢了。

  • 我们直接看n道题目需要做多少周,由题意知,每周可以做的题目数量为week=5a+2b,计算n道题目可以做temp=n/week周,然后计算还剩下多少道题目:sub=n%week
  • 如果sub==0,说明temp周刚好可以把所有题目做完,直接输出temp*7
  • 否则,我们计算下要做完剩余的sub道题目还剩下多少天,这个时候天数只能是1-6了,写个循环判断下就行,假设做完剩下这些题需要i天,那么输出temp*7+i

3、代码实现

3.1 方案一:累加方法(超时)

//只有60%的用例可以通过,剩下的超时了
    public static void count1() {
        Scanner scan = new Scanner(System.in);
        long a = scan.nextLong();   //周一至周五每天做a道题目
        long b = scan.nextLong();   //周六周日每天b道题目
        long n = scan.nextLong();
        int i = 1;
        int count = 0;
        while (count < n) {
            if (i % 7 >= 1 && i % 7 <= 5) {
                count += a;
            } else {
                count += b;
            }
            if (count >= n) {
                break;
            }
            i++;
        }
        System.out.println(i);
        scan.close();
    }

3.2 方案二

 //100%测试通过
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        long a = scan.nextLong();   //周一至周五每天做a道题目
        long b = scan.nextLong();   //周六周日每天b道题目
        long n = scan.nextLong();
        //一周的刷题量
        long week = 5 * a + 2 * b;
        long temp = n / week;   //做了多少周
        long sub = n % week;//还剩下多少题没做
        if (sub == 0) { //可以被整除就直接输出
            System.out.println(temp * 7);
        } else {
            long count = 0;
            long i = 1;
            while (count < sub) {   //做完剩下的题需要几天
                if (i % 6 == 0) {   //此时最多6天,不用对7取模了
                    count += b;
                } else {
                    count += a;
                }
                if (count >= sub) {
                    break;
                }
                i++;
            }
            System.out.println(temp * 7 + i);
        }
        scan.close();
    }

运行结果如下:

image.png

这道题不难,就是暴力解法直接就超时了,只能通过60%,也就是说考试的时候只能拿60%的分,第二种直接满分。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。