美文网首页
2017年第八届蓝桥杯C/C++B组省赛

2017年第八届蓝桥杯C/C++B组省赛

作者: 简言之_ | 来源:发表于2020-03-08 11:25 被阅读0次

    题目一: 购物单

    小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。
    
    这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
    小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
    现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。
    
    取款机只能提供100元面额的纸币。小明想尽可能少取些现金,够用就行了。
    你的任务是计算出,小明最少需要取多少现金。
    以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
    --------------------
    ****     180.90       88折
    ****      10.25       65折
    ****      56.14        9折
    ****     104.65        9折
    ****     100.30       88折
    ****     297.15       半价
    ****      26.75       65折
    ****     130.62       半价
    ****     240.28       58折
    ****     270.62        8折
    ****     115.87       88折
    ****     247.34       95折
    ****      73.21        9折
    ****     101.00       半价
    ****      79.54       半价
    ****     278.44        7折
    ****     199.26       半价
    ****      12.97        9折
    ****     166.30       78折
    ****     125.50       58折
    ****      84.98        9折
    ****     113.35       68折
    ****     166.57       半价
    ****      42.56        9折
    ****      81.90       95折
    ****     131.78        8折
    ****     255.89       78折
    ****     109.17        9折
    ****     146.69       68折
    ****     139.33       65折
    ****     141.16       78折
    ****     154.74        8折
    ****      59.42        8折
    ****      85.44       68折
    ****     293.70       88折
    ****     261.79       65折
    ****      11.30       88折
    ****     268.27       58折
    ****     128.29       88折
    ****     251.03        8折
    ****     208.39       75折
    ****     128.88       75折
    ****      62.06        9折
    ****     225.87       75折
    ****      12.89       75折
    ****      34.28       75折
    ****      62.16       58折
    ****     129.12       半价
    ****     218.37       半价
    ****     289.69       8折
    --------------------
    
    需要说明的是,88折指的是按标价的88%计算,而8折是按80%计算,余者类推。
    特别地,半价是按50%计算。
    
    请提交小明要从取款机上提取的金额,单位是元。
    答案是一个整数,类似4300的样子,结尾必然是00,不要填写任何多余的内容。
    

    思路:处理下数据导入Excel

    image.png
    image.png

    答案:5200

    题目二:等差素数列

    2,3,5,7,11,13,....是素数序列。
    类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
    上边的数列公差为30,长度为6。
    
    2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
    这是数论领域一项惊人的成果!
    
    有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
    
    长度为10的等差素数列,其公差最小值是多少?
    
    注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
    

    解题思路:直接暴力枚举即可

    #include<cmath>
    #include<iostream>
    using namespace std;
    int isPrime(int a)//判断a是否为素数 
    {
        for(int i=2;i<=sqrt(a);i++)
        {
            if(a%i==0)
            {
                return 0;
            }
        }
        return 1; 
    }
    int main()
    {
        int i,k;
        for(k=1;k<=500;k++) //对公差进行枚举
        {
            for(i=2;i<=10000;i++) 
            {
                if(isPrime(i))//枚举所有的素数2,3,5,7,9... 
                {
                    //判断该素数之后公差为k的后9个数是否也是素数 
                    if(isPrime(i+k)&&isPrime(i+2*k)&&isPrime(i+3*k)&&isPrime(i+4*k)&&isPrime(i+5*k)&&isPrime(i+6*k)&&isPrime(i+7*k)&&isPrime(i+8*k)&&isPrime(i+9*k))
                    {
                        cout<<k;//如果后9个数都为素数输出该公差k 
                    }
        
                }
            }
    
        }
         return 0; 
     }
    

    题目三:承压计算

    X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。
    
    每块金属原料的外形、尺寸完全一致,但重量不同。
    金属材料被严格地堆放成金字塔形。
    
    image.png
    其中的数字代表金属块的重量(计量单位较大)。
    最下一层的X代表30台极高精度的电子秤。
    
    假设每块原料的重量都十分精确地平均落在下方的两个金属块上,
    最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。
    电子秤的计量单位很小,所以显示的数字很大。
    
    工作人员发现,其中读数最小的电子秤的示数为:2086458231
    
    请你推算出:读数最大的电子秤的示数为多少?
    
    注意:需要提交的是一个整数,不要填写任何多余的内容。
    

    题目四:方格分割

    6x6的方格,沿着格子的边线剪开成两部分。
    要求这两部分的形状完全相同。
    

    如图:p1.png, p2.png, p3.png 就是可行的分割法。


    image.png
    试计算:
    包括这3种分法在内,一共有多少种不同的分割方法。
    注意:旋转对称的属于同一种分割法。
    
    请提交该整数,不要填写任何多余的内容或说明文字。
    

    题目五:取数位

    求1个整数的第k位数字有很多种方法。
    以下的方法就是一种。
    
    
    // 求x用10进制表示时的数位长度
    int len(int x){
        if(x<10) return 1;
        return len(x/10)+1;
    }
        
    // 取x的第k位数字
    int f(int x, int k){
        if(len(x)-k==0) return x%10;
        return _____________________;  //填空
    }
        
    int main()
    {
        int x = 23574;
        printf("%d\n", f(x,3));
        return 0;
    }
    
    对于题目中的测试数据,应该打印5。
    
    请仔细分析源码,并补充划线部分所缺少的代码。
    
    注意:只提交缺失的代码,不要填写任何已有内容或说明性的文字。
    

    解题思路:这道题一看就是要让我们来补充递归调用的代码,分析f函数,如果x用10进制表示时的数位长度和所求的一样长,就返回个位数,如果不一样长,那么应该截取到一样长,要么len(x)减小,要么k增大,但是k不能再增大了,所以len(x)减小,即x减小,也就是x/10。
    答案:f(x/10,k)

    相关文章

      网友评论

          本文标题:2017年第八届蓝桥杯C/C++B组省赛

          本文链接:https://www.haomeiwen.com/subject/hghsvqtx.html