第六届蓝桥杯真题总结

第一题:奖券数目

有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。

虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。

请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

void solve()
{
    int ans = 0;
    for (int a = 1; a <= 9; a++)
    {
        if (a == 4) continue;
        for (int b = 0; b <= 9; b++)
        {
            if (b == 4) continue;
            for (int c = 0; c <= 9; c++)
            {
                if (c == 4) continue;
                for (int d = 0; d <= 9; d++)
                {
                    if (d == 4) continue;
                    for (int e = 0; e <= 9; e++)
                    {
                        if (e == 4) continue;
                        ans++;
                    }
                }
            }
        }
    }
    cout << ans << endl;
}

int main()
{
    solve();

    return 0;
}

运行结果是:52488.

第二题 星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。

每个炸弹都可以设定多少天之后爆炸。

比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。

有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19

请严格按照格式书写。不能出现其它文字或符号。

使用Excel:

代码解法:

#include <iostream>
using namespace std;

int year = 1777, month = 4, day = 30;

bool IsEndofMonth();
void AddDay(int days);
void IncDay();
bool IsLeapYear();

bool IsLeapYear()
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

bool IsEndofMonth()
{
    switch(month)
    {
        case 4:
        case 6:
        case 9:
        case 11: return day == 30;
        case 2:
            if (IsLeapYear())
                return day == 29;
            else
                return day == 28;
        default:
            return day == 31;
    }
}

void IncDay()             //增加一天
{
    if(IsEndofMonth())         //增加天数,记得要判断是否是年末,月末
    {
        if(month == 12)
        {
            day = 1; month = 1; year++;
        }
        else {                  //已经是IsEndMonth
            day = 1; month++;
        }
    }
    else {
        day++;
    }
}

void AddDay(int days)
{
    for (int i = 1; i <= days; i++)    //增加多少天 days - 1
    {
        IncDay();
    }
}

int main()
{
//    AddDay(5343);
    cin >> year >> month >> day;
    AddDay(1000);
    cout << year << "-" << month << "-" << day << endl;

    return 0;
} 

第三题

观察下面的加法算式:
      祥 瑞 生 辉
  +   三 羊 献 瑞
-------------------
   三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
#include <iostream>
#include <algorithm>
using namespace std;

void solve()
{
    int num[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    do {
        int a = num[0]*1000 + num[1]*100 + num[2]*10 + num[3];
        int b = num[4]*1000 + num[5]*100 + num[6]*10 + num[1];
        int c = num[4]*10000 + num[5]*1000 + num[2]*100 + num[1]*10 + num[7];
        if (a + b == c && b > 1000) {
            cout << b << endl;
        }
    } while (next_permutation(num, num+10));
}

int main()
{
    solve();

    return 0;
}

第四题 格子中输出

StringInGrid函数会在一个指定大小的格子中打印指定的字符串。

要求字符串在水平、垂直两个方向上都居中。

如果字符串太长,就截断。

如果不能恰好居中,可以稍稍偏左或者偏上一点。

下面的程序实现这个逻辑,请填写划线部分缺少的代码。

#include <stdio.h>

#include <string.h>

void StringInGrid(intwidth, int height, const char* s)

{
    int i,k;

    char buf[1000];

    strcpy(buf, s);

    if(strlen(s)>width-2) buf[width-2]=0;

    printf("+");

    for(i=0;i<width-2;i++) printf("-");

    printf("+\n");

    for(k=1; k<(height-1)/2;k++){

        printf("|");

        for(i=0;i<width-2;i++) printf(" ");

        printf("|\n");

    }   

    printf("|");   

    printf("%*s%s%*s",_____________________________________________);  //填空

    printf("|\n");
    for(k=(height-1)/2+1; k<height-1; k++){

        printf("|");

        for(i=0;i<width-2;i++) printf(" ");

        printf("|\n");

    }
    printf("+");

    for(i=0;i<width-2;i++) printf("-");

    printf("+\n"); 

}

int main()

{
    StringInGrid(20,6,"abcd1234");
    return 0;

}
对于题目中数据,应该输出:

+------------------+

|                  |

|     abcd1234     |

|                  |

|                  |

+------------------+

(如果出现对齐问题,参看【图1.jpg】

注解:printf("%*s", len, "xxx"):相当于是 (len, "str"),  设置输出字符 为len位,  如果str长度不足len位, 前面补空格

printf("%*s%s%*s", (width-2-strlen(s))/2, "", s, (width-2-strlen(s))/2, "");  //填空
第五题:九数组分数
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
#include<stdio.h>
void test(int x[])
{
    int a = x[0]*1000 + x[1]*100 + x[2]*10 +x[3];

    int b = x[4]*10000 + x[5]*1000 + x[6]*100 +x[7]*10 + x[8];

    if(a*3==b) printf("%d / %d\n", a,b);

}
void f(int x[],int k)
{
    int i,t;

    if(k>=9){
        test(x);
        return;
    }

    for(i=k; i<9; i++){
        {t=x[k]; x[k]=x[i]; x[i]=t;}
        f(x,k+1);
        _____________________________________________// 填空处
    }
}
int main()
{
    int x[] = {1,2,3,4,5,6,7,8,9};
    f(x,0);
    return 0;
}

题解:一个简单的回溯问题

{t=x[k]; x[k]=x[i]; x[i]=t;} 

第六题:加法变乘法

我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:
1+2+3+...+10*11+12+...+27*28+29+...+49= 2015 就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。

原文地址:https://www.cnblogs.com/douzujun/p/8569467.html

时间: 2024-12-15 22:28:22

第六届蓝桥杯真题总结的相关文章

2015第六届蓝桥杯全国软件大赛省赛(预赛)总结

这是我上大学以来第一次自发的写总结,这也许意味着我对大学的看法和接下来的大学生活都将有所改变吧.首先说说引导我写这篇总结的"人物"吧,RUI,从大一开始便是同学,直到大三成为了舍友.他的成绩一直很好,如果没记错的话,大一专业第一名,大二好像也是第一第二的,总之在班里一直名列前茅,在学习成绩里边,最让我羡慕的就是他的英语了,四级和六级都是一次过,并且,六级考了500多分(具体多少记不清了),呃...除了学习成绩好之外,专业能力更是没的说,在大一就加入了学院里的ACM实验室,编程能力那也是

2015年第六届蓝桥杯C/C++B组省赛题目解析

一.奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张. 请提交该数字(一个整数),不要写任何多余的内容或说明性文字. 分析:直接枚举10000-99999之间的数字,如果带4,直接排除:不带4的,记录一次,直到枚举完后输出. #include <iostream

蓝桥杯——真题训练之蚂蚁感冒

标题:蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. [数据格式] 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100),

蓝桥杯——真题训练之李白打酒

标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了. 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b.则:babaabbabbabbbb 就是合理的次序.像这样的答案一共有多少呢?请你计算出所有可能方案? public class Main{ public static void m

算法笔记_208:第六届蓝桥杯软件类决赛真题(Java语言A组)

目录 1 胡同门牌号 2 四阶幻方 3 显示二叉树 4 穿越雷区 5 切开字符串 6 铺瓷砖   前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 胡同门牌号 标题:胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的. 有一天小明突然发现了有趣的事情: 如果除去小明家不算,胡同里的其它门牌号加起来,刚好是100! 并且,小明家的门牌号刚好等于胡同里其它住户的个数! 请你根据这些信息,推算小明家的门牌号是多少? 请提交该整数,不要填写任何多

算法笔记_216:第六届蓝桥杯软件类校赛部分真题(Java语言C组)

目录 1 题目一 2 题目二 3 题目三 4 题目四 5 题目五 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学家杨辉1261年所著的<详解九章算法>一书里就出现了. 其排列规律: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 如下的程序,用来建立N行的杨辉三角形.请填写划线部分缺少的代码.

算法笔记_215:第六届蓝桥杯软件类校赛部分真题(Java语言B组)

目录 1 题目一 2 题目二 3 题目三 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 java中提供了对正则表达式的支持. 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码. 注意:只填写缺少代码,不要写任何多余内容,例如,已有的双引号. public class A { public static int f(String s) { return s.split("________________&quo

2015第六届蓝桥杯竞赛感悟

之前对算法一直是敬畏的,觉得很难去学习,但是通过蓝桥杯竞赛也算是强迫自己认真学习了一个多月的算法,发现算法也是可以学的. 前天竞赛就结束了,一直拖到今天才来写一篇总结,其实这次竞赛收货真的蛮大的,自己以前一直不够重视内功的培养,现在能有这么一个机会来修炼内容还是挺开心的. 感觉这次考试题和前两届去比确实难度有所增加,第九题缓存没有写好,第十题压根就没来的及做...其实第十题下来想想是能做的,只是考前最短路径这种动态规划题做的不多,所以在比赛场上就有点怯了...虽然是很想得一等奖参加决赛的,不过照

第六届蓝桥杯本科B组C++省赛题解

比赛结束已经一星期了,成绩也出来了,江苏非211组的省前十,但是深感自己还是有太多的不足.绝对不能以自己还只是大一为借口,acm这条路还长的很. 目测得了95分(满分150),第一题错了,代码填空第一题错了,倒数第二题扣了一点分,最后一道大题全错. 之所以会这么晚来发这道题解,是因为深感自己不足,倒数第二题之所以没有做出来,是因为自己居然不会用[矩阵快速幂].因此,现学现用以自省. 关于题目:所有填空题都可以纯暴力,只要会回溯剪枝法对于蓝桥杯已经足够了.大题目难度一年比一年高 第一题 结果填空