统计
  • 建站日期:2021-03-10
  • 文章总数:689 篇
  • 评论总数:726 条
  • 分类总数:10 个
  • 最后更新:12月3日
文章 精密算法

2020蓝桥杯省赛第二场C组_java

程序员阿鑫
首页 精密算法 正文

试题 A: 约数个数

本题总分:5 分

【问题描述】

对于一个整数,能整除这个整数的数称为这个数的约数。
例如:1, 2, 3, 6 都是 6 的约数。
请问 78120 有多少个约数。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【题解】

答案 :96
遍历一遍所有小于等于78120的数得了

public class Main {
    public static void main(String[] args) {
        int cut = 0;
        for (int i = 1; i <= 78120; i++) {
            if (78120 % i == 0) cut ++;
        }
        System.out.println(cut);
    }
}


2020蓝桥杯省赛第二场C组_java
-程序员阿鑫-带你一起秃头!
-第1
张图片

试题 B: 寻找 2020

本题总分:5 分

【问题描述】

本题附件链接

小蓝有一个数字矩阵,里面只包含数字 0 和 2。小蓝很喜欢 2020,他想找到这个数字矩阵中有多少个 2020 。
小蓝只关注三种构成 2020 的方式:

  • 同一行里面连续四个字符从左到右构成 2020。
  • 同一列里面连续四个字符从上到下构成 2020。
  • 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。

例如,对于下面的矩阵:

220000
000000
002202
000000
000022
002020

一共有 5 个 2020。其中 1 个是在同一行里的,1 个是在同一列里的,3 个是斜线上的。
小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一个文件里面,在试题目录下有一个文件 2020.txt,里面给出了小蓝的矩阵。
请帮助小蓝确定在他的矩阵中有多少个 2020。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【题解】

答案:16520

import java.io.BufferedReader;
import java.io.FileReader;

public class Main {
    public static void main(String[] args) throws Exception {
        //缓冲流读入文件,后面路径看你放在哪个位置了
        BufferedReader br = new BufferedReader(new FileReader("src/2020.txt"));
        String s = null;
        char[][] a = new char[300][];
        int in = 0;
        while ((s = br.readLine()) != null) {
            a[in] = s.toCharArray();
            in ++;
        }
        //定义方向,右,下,右下
        int[][] dir = {{0, 1}, {1, 0}, {1, 1}};
        //cut存储2020个数
        int cut = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != '2') continue;
                for (int k = 0; k < dir.length; k++) {
                    //向三个方向延伸
                    int temp = 2;
                    int x = i, y = j;
                    for (int l = 0; l < 3; l++) {
                        x += dir[k][0];
                        y += dir[k][1];
                        //处理一下边界
                        if (x >= a.length || y >= a[x].length) break;
                        //拼接数字
                        temp = temp * 10 + a[x][y] - '0';
                    }
                    //计算出每个方向的值比对
                    if (temp == 2020) {
                        cut ++;
                    }
                }
            }
        }
        System.out.println(cut);
    }
}


2020蓝桥杯省赛第二场C组_java
-程序员阿鑫-带你一起秃头!
-第2
张图片

试题 C: 跑步锻炼

本题总分:10 分

【问题描述】

小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【题解】

答案:8879

public class Main {
    public static void main(String[] args) {
        int[] week = {1,2,3,4,5,6,7};
        int weeki = 5;
        int[] date = {2000,0,0};    //为了方便处理,月份和日都从0开始
        int sum = 0;        //存储这20年跑步的总和
        while (true) {
            int year = date[0];
            int month = date[1];
            int day = date[2];
            //打印日期,测试日期是否进入正轨
            System.out.println(year+"年"+(month+1)+"月"+(day+1)+"日");
            int s = 1;
            if (week[weeki] == 1 || day == 0) {
                s = 2;
            }
            sum += s;
            if (year == 2020 && month == 9 && day == 0) {
                break;
            }
            weeki = (weeki + 1) % 7;
            //对于月份和日份构成循环
            date[2] = (day + 1) % getDayOfMonth(year,month);
            date[1] = (month + (day + 1) / getDayOfMonth(year,month)) % 12;
            //月份由12月变成1月时年份+1
            if (month == 11 && date[1] == 0) date[0] ++;
        }
        System.out.println(sum);
    }
    private static int getDayOfMonth(int year,int month) {
        switch (month) {
            case 0:
            case 2:
            case 4:
            case 6:
            case 7:
            case 9:
            case 11:
                return 31;
            case 3:
            case 5:
            case 8:
            case 10:
                return 30;
            case 1:
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    return 29;
                }
                return 28;
        }
        return 0;
    }
}


2020蓝桥杯省赛第二场C组_java
-程序员阿鑫-带你一起秃头!
-第3
张图片

试题 D: 平面分割

本题总分:10 分

【问题描述】

20 个圆和 20 条直线最多能把平面分成多少个部分?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【题解】

答案:1372

package com.cxyax.shengsai;

public class Main4 {

    public static void main(String[] args) {
        int n = 2;
        for(int i = 1; i < 20;i++) {
            n += 2 * i;
        }
//      System.out.println(n);

        for(int i = 1;i <= 20;i++) {
            n+=39; //与圆有几个焦点,就有多焦点-1个区域
            n+=i; //直线在圆外面增肌按区域数量
        }
        System.out.println(n);
    }

}

 

试题 E: 七段码

本题总分:15 分

【问题描述】

小蓝要用七段码数码管来表示一种特殊的文字。


2020蓝桥杯省赛第二场C组_java
-程序员阿鑫-带你一起秃头!
-第4
张图片

上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。
小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。

  • 例如:b 发光,其他二极管不发光可以用来表达一种字符。
  • 例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上

一行的方案可以用来表示不同的字符,尽管看上去比较相似。

  • 例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
  • 例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。

请问,小蓝可以用七段码数码管表达多少种不同的字符?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【题解】

答案:80


2020蓝桥杯省赛第二场C组_java
-程序员阿鑫-带你一起秃头!
-第5
张图片

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    //res存储灯管显示方式
    static HashSet<HashSet<Character>> res = new HashSet<>();
    public static void main(String[] args) {
        //存储所有灯管的连接关系
        ArrayList<G> list = new ArrayList<>();
        list.add(new G('a', 'b'));
        list.add(new G('a', 'f'));
        list.add(new G('c', 'b'));
        list.add(new G('g', 'b'));
        list.add(new G('c', 'd'));
        list.add(new G('c', 'g'));
        list.add(new G('e', 'd'));
        list.add(new G('e', 'g'));
        list.add(new G('e', 'f'));
        list.add(new G('f', 'g'));
        dfs(list,new ArrayList<G>(),0);
        //结果加上7,是因为有七种方式只有一个灯管,不与其他灯管相连
        System.out.println(res.size() + 7);
    }
    /*
    深搜所有灯管连接的子集
     */
    private static void dfs(ArrayList<G> list, ArrayList<G> gs, int i) {
        if (i == list.size()) {
            HashSet<Character> ds = new HashSet<>();
            //ds获得gs里面所有的灯管
            for (int j = 0; j < gs.size(); j++) {
                ds.add(gs.get(j).start);
                ds.add(gs.get(j).end);
            }
            //当灯管的数量比连接的数量多1,表示所有的灯管连在一起
            if (ds.size() - 1 == gs.size()) {
                res.add(ds);
            }
            return;
        }
        dfs(list, gs, i + 1);
        gs.add(list.get(i));
        dfs(list, gs, i + 1);
        gs.remove(list.get(i));
    }
}
/*
类名懒得想,就这样写个G吧
该类表示哪两个灯管连着
 */
class G {
    char start;
    char end;
    public G (char start, char end) {
        this.start = start;
        this.end = end;
    }
}


2020蓝桥杯省赛第二场C组_java
-程序员阿鑫-带你一起秃头!
-第6
张图片

试题 F: 成绩统计

时间限制: 1.0s 内存限制: 512.0MB
本题总分:15 分

【问题描述】

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。
【输入格式】
输入的第一行包含一个整数 n,表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
【输出格式】
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。
【样例输入】

7
80
92
56
74
88
100
0

【样例输出】

71%
43%

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
这篇文章最后更新于2021-10-28,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
校园表白墙带后台网站源码
« 上一篇
火绒剑 HRSword 5.0.1.1(火绒剑单独版)
下一篇 »
为了防止灌水评论,登录后即可评论!
注册登录

HI ! 请登录
注册会员,享受下载全站资源特权。
登陆 注册
上号,带你一起秃头!

IP地址

热门文章

1
抖音无限礼物模拟小工具分享
2
QQ假红包引流QQ群教程及代码
4
卡QQ永久大会员方法

最新文章

标签