• CCF CSP认证 历年题目自练 Day22


    CCF CSP认证 历年题目自练 Day22

    题目一

    试题编号: 201912-1
    试题名称: 报数
    时间限制: 1.0s
    内存限制: 512.0MB
    请添加图片描述
    请添加图片描述

    题目分析(个人理解)

    1. 每一个人都要报多少个数字,我选择字典存储,key代表甲乙丙丁4人,value代表每个人报的是7的倍数的个数。我们需要一个计数器从1开始报数一直到满足结束条件。(开始进入循环)
    2. 如果计数器是7的倍数,那么对应的dic[number%4]就+1 (找到是哪个人报的)注意停止条件,在总共报出n个数后(不计入被跳过的数)游戏结束。如果计数器减去所有是7的倍数的个数大于等于n那么游戏结束(跳出循环)。
    3. 上代码!!!
    n=int(input())
    dic={}
    for i in range(4):
        dic[i]=0
    number=0
    while(1):
        number+=1
        if number%7==0 or '7' in str(number):
            dic[number%4]+=1
        if (number-dic[1]-dic[2]-dic[3]-dic[0])>=n:
            break
    
    print(dic[1])#甲
    print(dic[2])#乙
    print(dic[3])#丙
    print(dic[0])#丁
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    题目二

    试题编号: 201912-2
    试题名称: 回收站选址
    时间限制: 1.0s
    内存限制: 512.0MB
    请添加图片描述
    请添加图片描述
    请添加图片描述

    题目分析(个人理解)

    1. 题目又臭又长,我的理解是这样的,第一行输入的是有几个存垃圾的地方,后面的每一行输入的是对应的坐标,现在要建回收站,那么条件是垃圾站选址点必须有垃圾而且上下左右也要有垃圾,否则就不建立垃圾站,还有个评分的条件,就是看回收站的左上,左下,右上,右下四个点是否有垃圾,有几个点有垃圾评分就是多少。现在要输出评分为0,1,2,3,4的回收站的个数。
    2. 我选择用列表分别存放每个垃圾地点的横坐标和纵坐标,我还需要判断所有的垃圾点哪些能建立垃圾回收站,在满足以上条件(是垃圾点,满足建立垃圾回收站站的条件)之后,再判断该点(建回收站的点)的左上,左下,右下,右上是否存在垃圾,如果存在计数器加一。我把最后需要输出的存放在列表num中,位序即为得分,值就是评分为0,1,2,3,4的垃圾回收站的个数。最后循环输出num即可
    3. 下面具体到判断该点是否能建立垃圾回收站,直接遍历每个垃圾点(回收站一定在垃圾点),先找到每个垃圾点上下左右的坐标,之后再去判断这些坐标是否在我输入的垃圾点全部存在,之后再进行评分的判断
    4. 评分的判断,找到回收站的点然后找到对应的四个对角的位置,再去遍历判断每个垃圾点的横纵坐标有几个满足条件的,有一个就计数器加1,对应的num位序的值也+1。
    5. 上代码!!!
    n=int(input()) #输入的存垃圾地点数
    a=[0]*n  #输入的垃圾地点的横坐标
    b=[0]*n #输入的垃圾地点的纵坐标
    t=0 #记录某点上下左右邻居位置是否存在垃圾
    num=[0]*5 #记录满足条件的地方其四个对角的得分
     
    #输入
    for i in range(n):
        a[i],b[i]=map(int,input().split())
     
    #两层循环,对于每个坐标循环判断其上下左右是否存在。
    #若存在,则判断其对角种几处有垃圾,把相应的值用num数组记录
    for o in range(n):
        t = 0
        hx,hy=a[o],b[o]+1     #上的横纵坐标
        rx,ry=a[o]+1,b[o]
        bx,by=a[o],b[o]-1
        lx,ly=a[o]-1,b[o]
        ci=0
        for i in range(n):
            if (a[i]==hx and b[i]==hy )or (a[i]==rx and b[i]==ry) or (a[i]==bx and b[i]==by) or (a[i]==lx and b[i]==ly):
                t+=1
        k=0
        if t==4:
            #四个对角位置的横纵坐标
            lhx ,lhy = a[o] - 1 , b[o] + 1
            rhx ,rhy = a[o] + 1 , b[o] + 1
            rbx ,rby = a[o] + 1 , b[o] - 1
            lbx ,lby = a[o] - 1 , b[o] - 1
            for i in range(n):
                if (a[i] == lhx and b[i] == lhy) or (a[i] == rhx and b[i] == rhy) or (a[i] == lbx and b[i] == lby) or (
                        a[i] == rbx and b[i] == rby):
                    k = k + 1
            num[k]+=1
     
    #输出
    for j in range(5):
        print(num[j])
     
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    总结

    没啥好总结的,该干啥干啥。
    请添加图片描述

  • 相关阅读:
    leetcode 剑指offer51:数组中的逆序对 归并排序
    NX二次开发-NX+VS写代码设断点调试技巧
    React——关于JSX
    使用ABAP2XLSX操作EXCEL
    【Linux】线程
    中间件、Kafka、Zookeeper
    spring boot项目运行及打包
    Linux上安装Redis教程
    连续学习入门(二):连续学习的三种类型
    用QT的modbus相关类编写ModbusTcp主站
  • 原文地址:https://blog.csdn.net/m0_63216005/article/details/133580200