2017 【第八届蓝桥杯省赛】 C/C++ C组

第一题:贪吃蛇长度

+-------------------------------------------------+
|                                                 |
|    H######                      ####            |
|          #                      #  #            |
|          #                      #  #            |
|          #     ####             #  #            |
|          #     #  #             #  #            |
|          ######@###             #  #            |
|                #       ####     #  #            |
|                #       #  #     #  #            |
|            ####@#######@###     #  #            |
|            #   #       #        #  #            |
| T          #####       #        #  #   ##       |
| #                      #      ###  ### ##       |
| ################       #      #      ####       |
|                #       #      #         #       |
|   ##############       #######@##########       |
|   #                         ###                 |
|   ###########################                   |
+-------------------------------------------------+

    小明在爷爷的私人收藏馆里找到一台老式电脑。居然没有图形界面,只能用控制台编程。
经过小明的一阵摸索,神奇地设计出了控制台上的贪食蛇游戏。

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

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

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

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

    注意:需要提交的是一个整数,不要添加任何多余内容(比如说明或注释)

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int ans = 0;
    while (1)
    {
        char ch = getchar();
        ans += ch == '#' ? 1 : ch == '@' ? 2 : 0;
        /* if(ch=='#')
        {
        	ans+= 1;
		}
		else if(ch=='@')
		{
			ans+= 2;
		}
		else
		{
			ans+= 0;
		}*/
        if(ch == '0')//输入一个0跳出循环
            break;
    }
    printf("%d", ans+ 2);
    return 0;
}

故结果为:190。

第三题:算式900

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

  看下面的算式:

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

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

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

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

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

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

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int num[]= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
	do
	{
		int a= 1000* num[0] + 100* num[1] + 10* num[2] + num[3];
		int b= 1000* num[4] + 100* num[5] + 10* num[6] + num[7];
		int c= 10* num[8] + num[9];
		if((a- b)* c== 900)
		{
			printf("(%d-%d)*%d=900\n", a, b, c);
		}
	}while(next_permutation(num, num+ 10));/*next_permutation(num,num+10)函数:将num到num+10这个数组进行全排列,当当前序列不存在下一个排列时,函数返回false,否则返回true*/
	return 0;
}

故结果为:(6048-5973)*12=900.

第五题:杨辉三角

杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要。

第0行:           1
第1行:          1 1
第2行:         1 2 1
第3行:        1 3 3 1
第4行:       1 4 6 4 1
....

两边的元素都是1, 中间的元素是左上角的元素与右上角的元素和。

我们约定,行号,列号都从0计数。
所以: 第6行的第2个元素是 15,第3个元素是20

直观地看,需要开辟一个二维数组,其实一维数组也可以胜任。
如下程序就是用一维数组“腾挪”的解法。

// 杨辉三角的第row行,第col列 
long long f(int row, int col){
    if(row<2) return 1;
    if(col==0) return 1;
    if(col==row) return 1;
    
    long long a[1024];
    a[0]=1;
    a[1]=1;    
    int p = 2;
    int q;
    
    while(p<=row){
        a[p] = 1;
        for( _________________ ) a[q] = a[q] + a[q-1]; //填空
        p++;
    }
    
    return a[col];
}
 
int main()
{
    printf("%d\n", f(6,2));
    printf("%d\n", f(6,3));
    printf("%lld\n", f(40,20));    
    return 0;
}
请仔细分析源码,并完成划线部分缺少的代码。
注意:只提交缺少的代码,不要提交已有的代码和符号。也不要提交说明性文字。
————————————————
版权声明:本文为CSDN博主「晚风吻尽荷叶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_18841761/article/details/108110150

//答案:
int q = p - 1; q > 0; q--

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值