2017年蓝桥杯C组真题及解析

01 贪吃蛇长度 数数 -> 输入+字符判断+计数

标题:贪吃蛇长度

+-------------------------------------------------+
|                                                 |
|    H######                      ####            |
|          #                      #  #            |
|          #                      #  #            |
|          #     ####             #  #            |
|          #     #  #             #  #            |
|          ######@###             #  #            |
|                #       ####     #  #            |
|                #       #  #     #  #            |
|            ####@#######@###     #  #            |
|            #   #       #        #  #            |
| T          #####       #        #  #   ##       |
| #                      #      ###  ### ##       |
| ################       #      #      ####       |
|                #       #      #         #       |
|   ##############       #######@##########       |
|   #                         ###                 |
|   ###########################                   |
+-------------------------------------------------+
小明在爷爷的私人收藏馆里找到一台老式电脑。居然没有图形界面,只能用控制台编程。

经过小明的一阵摸索,神奇地设计出了控制台上的贪食蛇游戏。

如上图,是游戏时画面截图。
其中,H表示蛇头,T表示蛇尾。#表示蛇的身体,@表示身体交叉重叠的地方。
你能说出现在的贪吃蛇长度是多少吗?

其实,只要数出#的数目算1,数出@的数目,算2,再加上头尾各算1就计算好了。

人工数一下?太累眼睛了,聪明的你为什么不让计算机帮忙呢?

本题的要求就是: 请填写上图中贪食蛇的长度是多少?

注意:需要提交的是一个整数,不要添加任何多余内容(比如说明或注释)
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
   
    int ans=0;
    for (int i = 0; i < 20; ++i) {
   
        for (int j = 0; j < 51; ++j) {
   
            char c;
            scanf("%c",&c);//璇诲叆瀛楃锛岃繘琛岀粺璁?
            if(c=='#')ans++;
            if(c=='@')ans+=2;
        }
    }
    printf("%d",ans+2);
    return 0;
}

输出结果:190

02 兴趣小组 文件读取+set的运用

标题:兴趣小组

为丰富同学们的业余文化生活,某高校学生会创办了3个兴趣小组
(以下称A组,B组,C组)。
每个小组的学生名单分别在【A.txt】,【B.txt】和【C.txt】中。
每个文件中存储的是学生的学号。

由于工作需要,我们现在想知道:
既参加了A组,又参加了B组,但是没有参加C组的同学一共有多少人?

请你统计该数字并通过浏览器提交答案。

注意:答案是一个整数,不要提交任何多余的内容。


笨笨有话说:
哇塞!数字好多啊!一眼望过去就能发现相同的,好像没什么指望。
不过,可以排序啊,要是每个文件都是有序的,那就好多了。

歪歪有话说:
排什么序啊,这么几行数字对计算机不是太轻松了吗?
我看着需求怎么和中学学过的集合很像啊…

#include <set>
#include <iostream>
#include <fstream>

using namespace std;
set<string> A;
set<string> B;
set<string> C;
int ans;

void read(set<string> &A,char *path) {
   
    ifstream fin;
    fin.open(path, ios_base::in);
    while (!fin.eof()) {
   //eof==>end of file
        string s;
        fin >> s;
        if(s.length()>0)
            A.insert(s);
    }
    fin.close();
}

int main(int argc, const char *argv[]) {
   
    read(A,"/Users/zhengwei/CLionProjects/lanqiao2018/2017_C_C/A.txt");
    read(B,"/Users/zhengwei/CLionProjects/lanqiao2018/2017_C_C/B.txt");
    read(C,"/Users/zhengwei/CLionProjects/lanqiao2018/2017_C_C/C.txt");

    cout << A.size() << endl;
    cout << B.size() << endl;
    cout << C.size() << endl;
//    遍历集合A
    set<string>::iterator iterA = A.begin();
    while (iterA != A.end()) {
   
        if (B.find(*iterA) != B.end() && C.find(*iterA) == C.end())//B中有但C中没有,计数+1
            ans++;
        iterA++;
    }
    cout << ans << endl;
    return 0;
}

03 算式 900 全排列

标题:算式900

小明的作业本上有道思考题:

看下面的算式:

(□□□□-□□□□)*□□=900

其中的小方块代表0~9的数字,这10个方块刚好包含了0~9中的所有数字。
注意:0不能作为某个数字的首位。

小明经过几天的努力,终于做出了答案!如下:
(5012-4987)*36=900

用计算机搜索后,发现还有另外一个解,本题的任务就是:请你算出这另外的一个解。

注意:提交的格式需要与示例严格一致;
括号及运算符号不要用中文输入法;
整个算式中不能包含空格。

注意:机器评卷,不要填写任何多余的内容,比如说明文字。

#include <iostream>
#include <algorithm> //next_permutation函数头文件
using namespace std;
int main(int argc, const char *argv[]) {
   
    int a[] = {
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    do {
   
        if (a[0] == 0 || a[4] == 0 || a[8] == 0)continue;
        int x1 = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
        int x2 = a[4] * 1000 + a[5] * 100 + a[6] * 10 + a[7];
        int x3 = a[8] * 10 + a[9];
        if ((x1 - x2) * x3 == 900) {
   
            printf("(%d%d%d%d-%d%d%d%d)*%d%d=900\n", 
                    a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
        }
    } while (next_permutation(a, a + 10));
    return 0;
}

(5012-4987)*36=900
(6048-5973)*12=900

04 承压计算 二维数组的运用+计量的倍数扩大

标题:承压计算

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

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

                             7
                            5 8
                           7 8 8
                          
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值