2017蓝桥杯省赛C++B组真题与题解(一)

简介: 2017蓝桥杯省赛C++B组真题与题解

A:购物单

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。


这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。


小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。


现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。


取款机只能提供 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%计算。


请输出小明要从取款机上提取的金额,单位是元。


运行限制

最大运行时间:1s

最大运行内存: 128M

一般第一题都是送分题,首先处理数据,将前面的字符删掉,后边几折改为数字

180.90       88
10.25       65
56.14        90
104.65        90
100.30       88
297.15        50
26.75       65
130.62        50
 240.28       58
270.62        80
115.87       88
247.34       95
73.21        90
101.00        50
79.54        50
278.44        70
199.26        50
12.97        90
166.30       78
125.50       58
84.98        90
113.35       68
166.57        50
42.56        90
81.90       95
131.78        80
255.89       78
109.17        90
146.69       68
139.33       65
141.16       78
154.74        80
59.42        80
85.44       68
293.70       88
261.79       65
11.30       88
268.27       58
128.29       88
251.03        80
208.39       75
128.88       75
62.06        90
225.87       75
12.89       75
34.28       75
62.16       58
129.12        50
218.37        50
289.69        80
180.90       88
10.25       65
56.14        90
104.65        90
100.30       88
297.15        50
26.75       65
130.62        50
 240.28       58
270.62        80
115.87       88
247.34       95
73.21        90
101.00        50
79.54        50
278.44        70
199.26        50
12.97        90
166.30       78
125.50       58
84.98        90
113.35       68
166.57        50
42.56        90
81.90       95
131.78        80
255.89       78
109.17        90
146.69       68
139.33       65
141.16       78
154.74        80
59.42        80
85.44       68
293.70       88
261.79       65
11.30       88
268.27       58
128.29       88
251.03        80
208.39       75
128.88       75
62.06        90
225.87       75
12.89       75
34.28       75
62.16       58
129.12        50
218.37        50
289.69        80


#include <iostream>
using namespace std;
int main()
{
  cout<<5200;
  return 0;
}

B:等差素数列


题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


2,3,5,7,11,13,.... 是素数序列。 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。


上边的数列公差为 30,长度为 6。


2004 年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果!


有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:


长度为 10 的等差素数列,其公差最小值是多少?


运行限制

最大运行时间:1s

最大运行内存: 128M

首先你要求一个范围内的素数,尽量大一些,因为我们不知道范围,填空题也不会卡时间。然后存储到数组内。遍历这个数组,遍历1到d作为公差,d也随意取,不过要大一些。m记录多少个公差。当m为9时结束。检查公差,取最小值。

#include <iostream>
#include <cmath>
using namespace std;
bool sushu(int x){
  if(x==1){
    return false;
  }
  if(x==2){
    return true;
  }
  for(int i=2;i*i<=x;i++){
    if(x%i==0){
      return false;
    }
  }
  return true;
}
int a[10000];
int main(){
  int ans=10000000;
  int c=0;
  for(int i=2;i<10000;i++){
    if(sushu(i)){
      a[c]=i;            //求100000内的所有素数 
      c++;               //不知道范围所以尽量求大点 
    }
  }
  int d=10000;          //最大公差 ,随意设,尽量大一点
  for(int i=0;i<c;i++){     //遍历所有素数 
    for(int j=1;j<=d;j++){  //以每个素数为开头,以1到d为公差开始试 
      int m=1;
      while(sushu(a[i]+j*m) && m<=9){
        m++;
      } 
      if(m==9){
        ans=min(j,ans);
      }
    } 
  }
  cout<<ans;
  return 0;
}

C:承压计算

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


X 星球的高科技实验室中整齐地堆放着某批珍贵金属原料。


每块金属原料的外形、尺寸完全一致,但重量不同。 金属材料被严格地堆放成金字塔形。

                             7 
                            5 8 
                           7 8 8 
                          9 2 7 2 
                         8 1 4 9 1 
                        8 1 8 8 4 1 
                       7 9 6 1 4 5 4 
                      5 6 5 5 6 9 5 6 
                     5 5 4 7 9 3 5 5 1 
                    7 5 7 9 7 4 7 3 3 1 
                   4 6 4 5 5 8 8 3 2 4 3 
                  1 1 3 3 1 6 6 5 5 4 4 2 
                 9 9 9 2 1 9 1 9 2 9 5 7 9 
                4 3 3 7 7 9 3 6 1 3 8 8 3 7 
               3 6 8 1 5 3 9 5 8 3 8 1 8 3 3 
              8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9 
             8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4 
            2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9 
           7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6 
          9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3 
         5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9 
        6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4 
       2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4 
      7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6 
     1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3 
    2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8 
   7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9 
  7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6 
 5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1 
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 

其中的数字代表金属块的重量(计量单位较大)。 最下一层的 XX 代表 3030 台极高精度的电子秤。


假设每块原料的重量都十分精确地平均落在下方的两个金属块上, 最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。


电子秤的计量单位很小,所以显示的数字很大。


工作人员发现,其中读数最小的电子秤的示数为:20864582312086458231


请你推算出:读数最大的电子秤的示数为多少?


运行限制

最大运行时间:1s

最大运行内存: 128M

首先每次都要除以2,但计算机是底板除,所以我们要乘以2的29次方,其实在计算机能计算的范围内大一点也没有关系。然后d[i][j]=d[i-1][j-1]+d[i-1][j]+x*m,x为输入的数,m为2的29次方

#include  <iostream>
#include <algorithm>
using namespace std;
long long a[35][35];
int main(){
  int m=1;
  for(int i=0;i<29;i++){
    m=m*2;
  }
  for(int i=1;i<30;i++){     //30行   
    for(int j=1;j<=i;j++){   //每行几个数 
      long long x;
      cin>>x;
      x=x*m;
      a[i][j]+=a[i-1][j-1]/2+a[i-1][j]/2+x; 
    }
  }
  for(int j=1;j<=30;j++){   //每行几个数 
    a[30][j]=a[29][j-1]/2+a[29][j]/2; 
  }
  sort(a[30]+1,a[30]+31);
  long long g=0;
  long long ans=1;
  if(a[30][1]<=2086458231){   //如果答案比算出来的大,证明我们要乘以g
    g=2086458231/a[30][1];
    ans=a[30][30]*g;
  }else{
    g=a[30][1]/2086458231;
    ans=a[30][30]/g;
  }
  cout<<ans;
  return 0;
}


#include <iostream>
using namespace std;
int main()
{
  cout<<72665192664;
  return 0;
}

D:方格分割


题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


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


如下就是三种可行的分割法。

试计算: 包括这 3 种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。


运行限制

最大运行时间:1s

最大运行内存: 128M

简单的dfs,值得注意的是由于我们是一条线,所以关于中心点对称的点也要标记。

#include <iostream>
using namespace std;
int a[7][7];
int ans;
int b[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
bool s[7][7];
void dfs(int x,int y){
  if(x==0 || x==6 || y==0 || y==6){
    ans++;
    return;
  }
  s[x][y]=1;
  s[6-x][6-y]=1;
  for(int i=0;i<4;i++){
    int tx=x+b[i][0];
    int ty=y+b[i][1];
    if(!s[tx][ty]){
      dfs(tx,ty);
    }
  }
  s[x][y]=0;
  s[6-x][6-y]=0;
} 
int main(){
  dfs(3,3);   //从中间开始走 
  cout<<ans/4;
  return 0;
}


相关文章
|
3月前
|
算法 测试技术 C++
小唐开始刷蓝桥(八)2013年第四届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(八)2013年第四届C/C++ B组蓝桥杯省赛真题
|
3月前
|
算法 C++ 数据格式
小唐开始刷蓝桥(七)2014年第五届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(七)2014年第五届C/C++ B组蓝桥杯省赛真题
|
3月前
|
算法 C++
小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题
|
3月前
|
算法 C++
小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题
|
3月前
|
机器学习/深度学习 存储 人工智能
小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题
|
3月前
|
存储 人工智能 算法
小唐开始刷蓝桥(四)2017年第八届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(四)2017年第八届C/C++ B组蓝桥杯省赛真题
|
3月前
|
数据安全/隐私保护 C++
小唐开始刷蓝桥(九)2012年第三届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(九)2012年第三届C/C++ B组蓝桥杯省赛真题
|
6天前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
13 0
|
6天前
|
存储 算法 搜索推荐
【C++】类的默认成员函数
【C++】类的默认成员函数
|
5天前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)