文章目录

  • 1、煤球数目
  • 2、生日蜡烛
  • 3、凑算式
  • 4、快速排序
  • 5、抽签
  • 6、方格填数
  • 7、剪邮票
  • 8、四平方和
  • 9、交换瓶子
  • 10、最大比例

1、煤球数目

有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),

如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

#include<bits/stdc++.h>using namespace std;int main()
{int n = 100;int sum = 0;for(int i = 1; i <= n; i ++){for(int j = 0; j <= i; j++){sum += j;}} cout << sum;return 0;
}

答案:171700

2、生日蜡烛

某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。


#include<bits/stdc++.h>using namespace std;int main()
{int n = 100;for(int i = 1; i <= n; i++){int sum = 0;for(int j=i; j <= 100; j++){sum += j;if(sum == 236){cout << i ;return 0;}}}return 0;
}

答案:26

3、凑算式


这个算式中AI代表19的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

#include<bits/stdc++.h>using namespace std;int main()
{  double num[10]={0,1,2,3,4,5,6,7,8,9};  int cnt = 0;do  {  if(num[1]+num[2]/num[3]+(num[4]*100+num[5]*10+num[6])/(num[7]*100+num[8]*10+num[9])==10)cnt++;}while(next_permutation(num+1,num+10)); cout << cnt;return 0;
}

答案:29

4、快速排序

排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。
其思想是:先选一个“标尺”,
用它把整个队列过一遍筛子,
以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
下面的代码是一种实现,请分析并填写划线部分缺少的代码。

#include <stdio.h>void swap(int a[], int i, int j)
{int t = a[i];a[i] = a[j];a[j] = t;
}int partition(int a[], int p, int r)
{int i = p;int j = r + 1;int x = a[p];while(1){while(i<r && a[++i]<x);while(a[--j]>x);if(i>=j) break;swap(a,i,j);}______________________;return j;
}void quicksort(int a[], int p, int r)
{if(p<r){int q = partition(a,p,r);quicksort(a,p,q-1);quicksort(a,q+1,r);}
}int main()
{int i;int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};int N = 12;quicksort(a, 0, N-1);for(i=0; i<N; i++) printf("%d ", a[i]);printf("\n");return 0;
}

注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
答案:swap(a, p, j);

5、抽签

X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。

那么最终派往W星的观察团会有多少种国别的不同组合呢?
下面的程序解决了这个问题。
数组a[] 中既是每个国家可以派出的最多的名额。
程序执行结果为:
DEFFF
CEFFF
CDFFF
CDEFF
CCFFF
CCEFF
CCDFF
CCDEF
BEFFF
BDFFF
BDEFF
BCFFF
BCEFF
BCDFF
BCDEF

(以下省略,总共101行)


#include <stdio.h>
#define N 6
#define M 5
#define BUF 1024void f(int a[], int k, int m, char b[])
{int i,j;if(k==N){ b[M] = 0;if(m==0) printf("%s\n",b);return;}for(i=0; i<=a[k]; i++){for(j=0; j<i; j++) b[M-m+j] = k+'A';______________________;  //填空位置}
}
int main()
{   int  a[N] = {4,2,2,1,1,3};char b[BUF];f(a,0,M,b);return 0;
}

仔细阅读代码,填写划线部分缺少的内容。
注意:不要填写任何已有内容或说明性文字。

第二个参数代表国家,i代表当前国家投入多少人,剩下的m-i个人由其余的国家提供
答案:f(a, k+1,m-i, b);

6、方格填数

如下的10个格子

填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

从左向右给图标上号,以十个数字的全排列为基础,判断相邻的数字是否满足条件。暴力计算。还挺有意思。

#include<bits/stdc++.h>
using namespace std;int num[10] = {0,1,2,3,4,5,6,7,8,9};
bool judge(int a,int b){if(abs(num[a]-num[b]) != 1){return true;}else{return false;}
}int main()
{   int cnt = 0;do{bool a0 = judge(0,1) && judge(0,4)&&judge(0,3)&&judge(0,5);bool a1 = judge(1,5) &&judge(1,2)&&judge(1,4)&&judge(1,6);bool a2 = judge(2,6)&&judge(2,5);bool a3 = judge(3,7) && judge(3,4)&&judge(3,8);bool a4 = judge(4,8)&&judge(4,5)&&judge(4,7)&&judge(4,9);bool a5 = judge(5,9) &&judge(5,6)&&judge(5,8);bool a6 = judge(6,9);bool a7 = judge(7,8);bool a8 = judge(8,9);if(a0 && a1 && a2 && a3 &&a4 && a5 &&a6 && a7 && a8){cnt++;} }while(next_permutation(num,num+10));cout << cnt;return 0;
}

7、剪邮票


如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)


比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字

** 将五个数列举出来,然后检测这五个数的连通性。**

#include<iostream>
#include<algorithm>
using namespace std;bool Vis[3][4];
int dirs[4][2] ={0,1,0,-1,1,0,-1,0};int ans=0;
int cnt;void dfs(int x, int y){if(cnt == 5){ans++;return;}for(int i = 0; i < 4; i++){int nx = x+dirs[i][0];int ny = y+dirs[i][1];if(nx<0 || nx>2 || ny<0 || ny>3)continue;if(!Vis[nx][ny]){Vis[nx][ny]=true;cnt++;dfs(nx,ny);} }
}int main(){for(int i1 = 1; i1 <= 12-4; i1++){for(int i2 = i1+1; i2 <= 12-3; i2++){for(int i3 = i2+1; i3<=12-2; i3++){for(int i4 = i3+1; i4<=12-1; i4++){for(int i5 = i4+1; i5<=12; i5++){cnt=1;fill(Vis[0],Vis[0]+12,true);Vis[(i2-1)/4][(i2-1)%4]=false;Vis[(i3-1)/4][(i3-1)%4]=false;Vis[(i4-1)/4][(i4-1)%4]=false;Vis[(i5-1)/4][(i5-1)%4]=false;dfs((i1-1)/4,(i1-1)%4);}}}}}   cout << ans;return 0;
}

8、四平方和

四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。
比如:
5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2
(^符号表示乘方的意思)
对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对4个数排序:
0 <= a <= b <= c <= d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法
程序输入为一个正整数N (N<5000000)
要求输出4个非负整数,按从小到大排序,中间用空格分开

例如,输入:

5

则程序应该输出:

0 0 1 2

再例如,输入:

12

则程序应该输出:

0 2 2 2

再例如,输入:

773535

则程序应该输出:

1 1 267 838

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 3000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。

四层循环一定会超时,所以在蓝桥杯中如果在大数据的情况下,一定不要使用超过三层的循环。

#include<bits/stdc++.h>
using namespace std;int main(){int x;cin >> x;for(int i = 0; i < ceil(sqrt(x)); i++){for(int j = 0; j < ceil(sqrt(x)); j++){for(int k = 0; k < ceil(sqrt(x)); k++){int t = x - i*i-j*j-k*k;int temp = sqrt(t);    //恰好 if(temp * temp ==t){vector<int> arr;arr.push_back(i);arr.push_back(j);arr.push_back(k);arr.push_back(temp);sort(arr.begin(),arr.end());for(int c = 0; c < 4; c++){cout << arr[c] << " ";}return 0;}         }}}return 0;
}

9、交换瓶子

有N个瓶子,编号 1 ~ N,放在架子上。
比如有5个瓶子:
2 1 3 5 4
要求每次拿起2个瓶子,交换它们的位置。
经过若干次后,使得瓶子的序号为:
1 2 3 4 5
对于这么简单的情况,显然,至少需要交换2次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
输入格式为两行:
第一行: 一个正整数N(N<10000), 表示瓶子的数目
第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。
输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。

例如,输入:

5
3 1 2 5 4

程序应该输出:

3

再例如,输入:

5
5 4 3 2 1

程序应该输出:

2

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms


10、最大比例

X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。
并且,相邻的两个级别间的比例是个固定值。
也就是说:所有级别的奖金数构成了一个等比数列。比如:
16,24,36,54
其等比值为:3/2
现在,我们随机调查了一些获奖者的奖金数。
请你据此推算可能的最大的等比值。
输入格式:
第一行为数字 N (0<N<100),表示接下的一行包含N个正整数
第二行N个正整数Xi(Xi<1 000 000 000 000),用空格分开。每个整数表示调查到的某人的奖金数额
要求输出:
一个形如A/B的分数,要求A、B互质。表示可能的最大比例系数
测试数据保证了输入格式正确,并且最大比例是存在的。

例如,输入:

3
1250 200 32

程序应该输出:

25/4

再例如,输入:

4
3125 32 32 200

程序应该输出:

5/2

再例如,输入:

3
549755813888 524288 2

程序应该输出:

4/1

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 3000ms


2016 【第七届蓝桥杯省赛】 C/C++ B组相关推荐

  1. 2016第七届蓝桥杯省赛C/C++ B组试题解析整理

    引言 今天是蓝桥杯省赛举办的日子,是一个很激动人心的时刻,也是我第一次参加蓝桥杯,从上午9点到下午1点,做题时间历经4个小时,想想就过瘾. 下面整理一下这次比赛的题目. *注:此处为了省事儿,全是用J ...

  2. 2015年第七届蓝桥杯省赛C语言B组

    2015年第七届蓝桥杯省赛C语言B组 题目来源:蓝桥杯 作者:GGG166 第一题: 题目:奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就 ...

  3. 2016年第七届蓝桥杯 - 国赛 - Java大学C组 - I. 路径之谜

    路径之谜 小明冒充X星球的骑士,进入了一个奇怪的城堡. 城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角. ...

  4. 2016年第七届蓝桥杯 - 国赛 - Java大学C组 - A. 平方末尾

    平方末尾 能够表示为某个整数的平方的数字称为"平方数" 比如,25,64 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数. 因为平方数的末位只可能是:[0, 1, ...

  5. 2018第九届蓝桥杯省赛c/c++ A 组题解(填空部分)

    第九届蓝桥杯省赛c/c++ A 组题解(部分) 1 分数 等比数列求前n项和 2 星期一 解题思路: 3 乘积尾零 4 第几个幸运数 5 打印图形 第九届蓝桥杯省赛c/c++ A 组题解(部分) 1 ...

  6. 2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人

    2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人 Ideas 首先我们根据数学常识可以知道,当每个机器人清扫的范围差不多时,最好都是 N / K,花的时间应该是最少的. ...

  7. java迷宫类编程题_第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法)...

    问题描述 试题 E: 迷宫 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为 ...

  8. 第十三届蓝桥杯模拟赛第二期JAVA组个人题解

    第十三届蓝桥杯模拟赛第二期JAVA组个人题解 文章目录 第十三届蓝桥杯模拟赛第二期JAVA组个人题解 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目1 小蓝的I ...

  9. 2022年第十三届蓝桥杯省赛C/C++B组个人题解

    2022年第十三届蓝桥杯省赛C/C++B组个人题解 试题 A: 九进制转十进制(数学) 试题 B: 顺子日期(语文) 试题 C: 刷题统计(模拟) [样例输入] [样例输出] 试题 D: 修剪灌木(找 ...

  10. 第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一!!!)

    第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一) 文章目录 第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一)

最新文章

  1. ECMAScript Query实例
  2. Leetcode409最长回文串 -字符哈希
  3. 疫情之下,“无接触”生意火了
  4. 语言舒尔特方格程序_有效提升孩子注意力的方法,舒尔特方格训练法,简单有效...
  5. 利用 Git OpenSSH 查看/生成 本机 ssh 公钥
  6. java学习笔记11 (构造方法 this深探)
  7. mysql主从复制的binlog和relay-log的区别
  8. neo4j查询节点的出度与入度的数量
  9. 内核中的notification chain浅析
  10. 小米变了?红米Note7今日开售 坚持了9分36秒...
  11. MySQL常见的存储引擎的区别?
  12. 自定义训练中保存检查点
  13. 最长上升子序列(LIS)和最长公共子序列(LCS) 模板
  14. 敏捷开发之极限编程过程
  15. 《图像语义分析》学习笔记 (二)
  16. 读周爱民《javascript语言精髓与编程实践》有感
  17. (9)Android之路====Android系统OTA更新
  18. 0 1随机数C语言程序,C语言产生随机数的方法
  19. 实体对齐 算法_[2017]Bootstrapping Entity Alignment with Knowledge Graph Embedding
  20. 运行于老虎证券开放api的一个小小策略

热门文章

  1. U盘不能mount带来的思考
  2. FLASH缓动导航制作方法.
  3. 【Webcam设计】相机底层工作流程,编程模型
  4. 【学习0605】NVIDIA DRIVE AGX Developer Kit - How to set up
  5. 1.9 Important Themes(一些重要的概念)
  6. jdk HashMap源码解读
  7. 【Tensorflow】Windows下基于Anaconda的Tensorflow环境配置
  8. 凸优化第七章统计估计 7.1 参数分布估计
  9. 凸优化第四章凸优化问题 4.2 凸优化
  10. BZOJ4764弹飞大爷——LCT