1. 奖券数目

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

请提交该数字(一个整数),不要写任何多余的内容或说明性文字。

#include<bits/stdc++.h>using namespace std;​bool check(int n) {    int t;    while (n) {        if (n % 10 == 4)return false;        n /= 10;    }​    return true;}​int main() {    int ans = 0;    for (int i = 10000; i < 100000; ++i) {        if (check(i)) ++ans;    }​    cout << ans << endl;

    return 0;}//52488

2. 星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。每个炸弹都可以设定多少天之后爆炸。比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19请严格按照格式书写。不能出现其它文字或符号。

思路由于时间较近,直接用EXCEL就可以得到答案

本题为填空题,并且比较简单,所以就手算吧,不用写代码了。

2015年1月1日 2015年1月16日  
2014年11月9日 2017年8月5日  

3. 三羊献瑞

观察下面的加法算式:

      祥 瑞 生 辉  +   三 羊 献 瑞-------------------   三 羊 生 瑞 气//需要对齐

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

/*思路:暴力尝试每种可能(枚举)​注意事项:注意进位问题*/#include<bits/stdc++.h>using namespace std;​int main() {    int ans = 0;    for (int a = 0; a <= 9; a++)        for (int b = 0; b <= 9; b++)            for (int c = 0; c <= 9; c++)                for (int d = 0; d <= 9; d++)                    for (int e = 0; e <= 9; e++)                        for (int f = 0; f <= 9; f++)                            for (int g = 0; g <= 9; g++)                                for (int h = 0; h <= 9; h++)                                {                                    if (a == b || a == c || a == d || a == e || a == f || a == g || a == h || b == c || b == d || b == e || b == f || b == g || b == h || c == d || c == e || c == f || c == g || c == h || d == e || d == f || d == g || d == h || e == f || e == g || e == h || f == g || f == h || g == h) continue;                                    if (e == 0) continue;                                    if ((a * 1000 + b * 100 + c * 10 + d + e * 1000 + f * 100 + g * 10 + b) == (e * 10000 + f * 1000 + c * 100 + b * 10 + h))                                    {                                        ans = a * 1000 + b * 100 + c * 10 + d;                                        cout << ans << endl;                                        ans = e * 1000 + f * 100 + g * 10 + b;                                        cout << ans << endl;                                        ans = e * 10000 + f * 1000 + c * 100 + b * 10 + h;                                        cout << "------------" << endl << ans << endl << endl;    }    }return 0;}/*    9567答案  +  1085------------       10652*/​

4. 格子中输出

StringInGrid函数会在一个指定大小的格子中打印指定的字符串。要求字符串在水平、垂直两个方向上都居中。如果字符串太长,就截断。如果不能恰好居中,可以稍稍偏左或者偏上一点。

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

#include <stdio.h>#include <string.h>​void StringInGrid(int width, 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",(width - strlen(s) - 2) / 2, "", s, (width - strlen(s) - 2) / 2, "");   //利用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;}​

5. 九数组分数

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);        _____________________________________________ // 填空处        // 答案 {t=x[k]; x[k]=x[i]; x[i]=t;} //每次回溯必须还原变化,方便下次使用    }}

int main(){    int x[] = {1,2,3,4,5,6,7,8,9};    f(x,0);     return 0;}​

6. 加法变乘法

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

例:

1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015

就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

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

#include<bits/stdc++.h>using namespace std;​int sum(int a, int b) {    int Sum = 0;    for (; a <= b; ++a)Sum += a;    return Sum;}​int main() {    for(int i=2;i<=48;++i)        for (int j = i + 3; j <= 48; ++j)        {            int a = sum(1, i - 1);            int b = sum(i + 2, j - 1);            int c = sum(j + 2, 49);            int x = i * (i + 1);            int y = j * (j + 1);            if (a + b + c + x + y == 2015)cout << i << endl;        }    return 0;}​//10和16

7. 牌型种数

小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。

#include<iostream>using namespace std;int sum, ans;void dfs(int n)//n代表第n种牌,sum代表已经选择栏sum张牌    ans代表选好的13张牌的种数 {    if (sum > 13)return;//递归边界,直接返回     if (n == 14)        if (sum == 13)ans++;    else {        for (int i = 0; i < 5; i++)        {            sum += i;            dfs(n + 1);            sum -= i;//因为每一轮i取不同的值 进行下一轮dfs时,sum的初始值应该相同,所以-i         }    }}int main(){    sum = 0; ans = 0;    dfs(1);    cout << ans << endl;    return 0;}

8.移动距离

X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:

1 2 3 4 5 612 11 10 9 8 713 14 15 …

我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

输入为3个整数w m n,空格分开,都在1到10000范围内w为排号宽度,m,n为待计算的楼号。要求输出一个整数,表示m n 两楼间最短移动距离。

#include<bits/stdc++.h>using namespace std;​int jude(int x, int m, int w){    int y1;    if (x % 2 == 0)    {        if (m / w % 2 == 1 && m % w == 0)            y1 = w - 1;        else if (m / w % 2 == 0 && m % w == 0)            y1 = 0;        else            y1 = m % w - 1;    }    else    {        if (m / w % 2 == 1 && m % w == 0)            y1 = w - 1;        else if (m / w % 2 == 0 && m % w == 0)            y1 = 0;        else            y1 = w - m % w;    }    return y1;}​int main(){    int n, m, w;    while (cin >> w >> m >> n)    {        int x1, x2, y1, y2;        x1 = m / w;        x2 = n / w;        if (m%w == 0) x1 = (m - 1) / w;        if (n%w == 0) x2 = (n - 1) / w;        y1 = jude(x1, m, w);        y2 = jude(x2, n, w);        int ans = abs(x1 - x2) + abs(y1 - y2);        cout << ans << endl;    }    return 0;}

9. 骰子

赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。atm想计算一下有多少种不同的可能的垒骰子方式。两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。由于方案数可能过多,请输出模 10^9 + 7 的结果。

不要小看了 atm 的骰子数量哦~

「输入格式」第一行两个整数 n mn表示骰子数目接下来 m 行,每行两个整数 a b ,表示 a 和 b 数字不能紧贴在一起。​「输出格式」一行一个数,表示答案模 10^9 + 7 的结果。​「样例输入」2 11 2​「样例输出」544​「数据范围」对于 30% 的数据:n <= 5对于 60% 的数据:n <= 100对于 100% 的数据:0 < n <= 10^9, m <= 36
#include<bits/stdc++.h>using namespace std;​#define ll long long const ll mod = 1e9 + 7;struct matrix {    ll a[6][6];}dp;vector<vector<int>>vst;//只存储0 1 ​void inti() {    for (int i = 0; i < 6; ++i)        for (int j = 0; j < 6; ++j)            dp.a[i][j] = 1;    vst.resize(6, vector<int>(6, 0));}​matrix mul(matrix a, matrix b, ll mod) {    matrix c;    for(int i=0;i<6;++i)        for (int j = 0; j < 6; ++j) {            c.a[i][j] = 0;            if (vst[i][j])continue;            for (int k = 0; k < 6; ++k) {                c.a[i][j] += ((a.a[i][k] % mod)*(b.a[k][j] % mod)) % mod;                c.a[i][j] %= mod;            }        }    return c;}​matrix init() {    matrix a;    for (int i = 0; i < 6; i++) {        for (int j = 0; j < 6; j++) {            if (i == j)a.a[i][j] = 1;            else a.a[i][j] = 0;        }    }    return a;}​matrix pow(matrix a, ll b, ll mod) {    matrix res = init(), temp = a;    for (; b; b /= 2) {        if (b & 1) {            res = mul(res, temp, mod);        }        temp = mul(temp, temp, mod);    }    return res;}​ll pow1(ll a, ll b, ll mod) {    ll res = 1, t = a;    for (; b; b /= 2) {        if (b & 1)             res = res * t%mod;        t = t * t%mod;    }    return res;}​ll sum(matrix a, ll mod) {    ll ans = 0;    for(int i=0;i<6;++i)        for (int j = 0; j < 6; ++j) {            ans += a.a[i][j] % mod;            ans %= mod;        }    return ans;}​int main() {    ll n, m;    cin >> n >> m;    inti();    for (int i = 0; i < m; i++) {int a, b;cin >> a >> b;a = a - 1;//因为矩阵是从0开始编号 的所以应该-1;b = b - 1;dp.a[a][(b + 3) % 6] = 0;//(b+3)%6表示与a不能同一个面的顶面。dp.a[b][(a + 3) % 6] = 0;//表示的意思是,第b面朝上时,下一个骰子的第(a+3)%6面不可能朝上。理解了这一点就ok了。    }​dp = pow(dp, n - 1, mod);//dp[i]=A*dp[i-1];ll a1 = pow1(4, n, mod);ll ans = sum(dp, mod);cout << (a1*ans) % mod << endl;​}

10.生命之树

在X森林里,上帝创建了生命之树。

他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, …, vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。

在这个前提下,上帝要使得S中的点所对应的整数的和尽量大。这个最大的和就是上帝给生命之树的评分。

经过atm的努力,他已经知道了上帝给每棵树上每个节点上的整数。但是由于 atm 不擅长计算,他不知道怎样有效的求评分。他需要你为他写一个程序来计算一棵树的分数。

「输入格式」第一行一个整数 n 表示这棵树有 n 个节点。第二行 n 个整数,依次表示每个节点的评分。接下来 n-1 行,每行 2 个整数 u, v,表示存在一条 u 到 v 的边。由于这是一棵树,所以是不存在环的。
「输出格式」输出一行一个数,表示上帝给这棵树的分数。​「样例输入」51 -2 -3 4 54 23 11 22 5​「样例输出」8​「数据范围」对于 30% 的数据,n <= 10对于 100% 的数据,0 < n <= 10^5, 每个节点的评分的绝对值不超过 10^6 。
#include<bits/stdc++.h>#define MINN -2000000000#define MAXX 100005using namespace std;//dp[i]存放以i为根的生命之树的评分 int rst = MINN, V[MAXX], dp[MAXX], vis[MAXX];vector<int> e[MAXX];void dfs(int s){    vis[s] = true;    dp[s] = V[s];    for (int i = 0; i < e[s].size(); i++)    {        if (!vis[e[s][i]])        {            dfs(e[s][i]);            if (dp[e[s][i]] > 0)                dp[s] += dp[e[s][i]];        }    }    rst = max(dp[s], rst);}int main(){    int n, u, v;    cin >> n;    for (int i = 1; i <= n; i++)        cin >> V[i];    for (int i = 1; i < n; i++)    {        cin >> u >> v;        e[u].push_back(v);        e[v].push_back(u);    }    dfs(1);    cout << rst;}

蓝桥杯2015年省赛C/C++大学B组的更多相关文章

  1. 蓝桥杯2016年省赛C/C++大学A组

    网友年龄 某君新认识一网友. 当问及年龄时,他的网友说: "我的年龄是个2位数,我比儿子大27岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄" 请你计算:网友的年龄一 ...

  2. 蓝桥杯 2015年省赛最后一题 生命之树(树形dp)

    题目描述: 生命之树 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值.上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点 ...

  3. 【第九届蓝桥杯大赛决赛真题】JAVA大学C组题解

    有空就会更新.... 有的题目重复了:再另一篇帖子:https://www.cnblogs.com/dgwblog/p/9090923.html 02 结果填空(满分29分) 标题:海盗与金币 12名 ...

  4. 第六届蓝桥杯软件类省赛题解C++/Java

    第六届蓝桥杯软件类省赛题解C++/Java 1[C++].统计不含4的数字统计10000至99999中,不包含4的数值个数.答:暴力循环范围内所有数字判断一下就是了,答案是52488 1[Java]. ...

  5. 2016年第七届蓝桥杯c/c++省赛B组

    2016年第七届蓝桥杯c/c++省赛B组 声明:以下答案是我自己做的.不能保证正确,须要參考正确答案的请到其它地方找. 第一题 :煤球数目 题目叙述: 有一堆煤球,堆成三角棱锥形.详细: 第一层放1个 ...

  6. 2019年第十届蓝桥杯【C++省赛B组】

    试题 A: 组队 本题总分:5 分 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容.每位球员担任 1 号位至 5 号位时的评分如下表所示.请你计算首发阵容 ...

  7. 历届蓝桥杯C/C++省赛试题

    2012年第三届蓝桥杯C/C++程序设计本科B组省赛 2013年第四届蓝桥杯C/C++程序设计本科B组省赛 2014年第五届蓝桥杯C/C++程序设计本科B组省赛 2015年第六届蓝桥杯C/C++程序设 ...

  8. 蓝桥杯第九届省赛 sscanf(),str.c_str()函数的使用

    标题:航班时间 [问题背景]小h前往美国参加了蓝桥杯国际赛.小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”. 小h对超音速飞行感到十分恐惧.仔 ...

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

    目录 1 题目一 2 题目二 3 题目三 4 题目四 5 题目五 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学 ...

随机推荐

  1. CF1200D White Lines | 前缀和

    传送门 Examples input 1 4 2 BWWW WBBW WBBW WWWB output 1 4 input 2 3 1 BWB WWB BWB output 2 2 input 3 5 ...

  2. python命名空间(namespace)

    命名空间: 每一个作用域变量存储的位置,或者解释为 存储作用域中变量的字典. 作用: 获取想查看某个作用域中的变量名.变量值. 使用方法: locals()  #当前命名空间 1. 效果图: 2. 代 ...

  3. Django框架初体验

    前言 从今天开始学习测试开发知识,并会把每一次学习的过程和成果记录到博客,由于我也没怎么接触过python相关的开发框架,所以前期应该是艰难的,但是我相信努力就会有收获,如果你和我一样是个小白,那我们 ...

  4. 深夜话题boot2docker还有那些隐藏MENU

    马克思的博士论文:自由意识的集中表达 --字体我设为5(18pt),你们懂的 总有人埋汰,终于我想起一个负负得正的话题 为什么放在深夜,因为希望看到的人越少越好,深夜是时差党的乐园 本篇作为之前几篇围 ...

  5. 关于在读取excel的文件时候,放在服务器上就报路径错误

    就是指定这个路径:C:\Program Files (x86)\IIS Express 因为在上传到服务器的时候,服务器读取的是在服务器上的路径,所以正确的思路应该是 把上传的Excel存在服务器上, ...

  6. NPOI导出Excel生成多个sheet

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  7. Qt Installer Framework翻译(3-4)

    更新组件 下图说明了用于更新已安装组件的默认工作流程: 本节使用在macOS上运行的Qt 5维护工具为例,来演示用户如何更新已安装组件. 启动更新程序 用户启动维护工具时,将打开"简介&qu ...

  8. Manipulating Data from Oracle Object Storage to ADW with Oracle Data Integrator (ODI)

    0. Introduction and Prerequisites This article presents an overview on how to use Oracle Data Integr ...

  9. 时间序列数据库(TSDB)初识与选择

    时间序列数据库(TSDB)初识与选择 本文作者由 MageByte 团队的 「借来方向」编写,关注公众号 给你更多硬核技术 背景 这两年互联网行业掀着一股新风,总是听着各种高大上的新名词.大数据.人工 ...

  10. php--->自己封装的简易版mvc框架

    最近根据自己的理解,封装了一个自己的框架,来重新系统化梳理自己对mvc框架的理解:后续会陆续添加各种新的功能. 欢迎指点交流. GitHub:https://github.com/Frankltf/m ...