博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2016年第七届蓝桥杯C/C++程序设计本科B组省赛
阅读量:4958 次
发布时间:2019-06-12

本文共 13386 字,大约阅读时间需要 44 分钟。

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形。具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。   思路:1 2 3 4 5 6……这一个等差数列的前n项和为(1+n)*n/2 第1层的煤球数目为1 第2层的煤球数目为1+2 第3层的煤球数目为1+2+3  …… 第i层的煤球数组为(1+n)*n/2答案:171700*/// 数学逻辑#include 
using namespace std;int main(){ int sum=0,n; cin>>n; for(int i=1;i<=n;i++) { sum+=i*(i+1)/2; } cout<
<
using namespace std;int main(){ int n; cin >> n; int sum = 1, temp = 2, total = 1; for(int i = 1; i < n; i++) { sum += temp; total += sum; temp++; } cout << total << endl; return 0;}

  

 

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 生日蜡烛(结果填空)生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。思路:1 2 3 4 5 6……这一个等差数列的前n项和为(1+n)*n/2设从a岁开始过生日,到了b岁一共吹熄了236根蜡烛。即为:(a+b)(b-a+1)/2=236答案:26*/// 数学逻辑#include 
using namespace std;int main(){ for(int i=1;i<=100;i++) for(int j=i;j<=100;j++) { if((i+j)*(j-i+1)/2==236) cout<
using namespace std;int main(){ for(int i = 1; i <= 100; i++) { int sum = 0; int flag = 0; for(int j = i; j <= 103; j++) { sum += j; if(sum == 236) { flag = 1; break; } } if(flag) { cout << i; break; } } return 0;}

  

 

 

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 凑算式(结果填空)凑算式如下,这个算式中a~i代表1~9的数字,不同的字母代表不同的数字。----------------------------------------------a + (b / c) + ((d * e * f) / (g * h * i)) = 10----------------------------------------------// 注意事项与技巧////// 如果遇到除法问题,尽量转换为乘法问题,防止出现精度错误。///////// 四舍五入计算可以这样做: fllor(x + 0.5) //////比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。这个算式一共有多少种解法?思路:暴力解决,注意每个字母代表的数字不相等。答案:29*///暴力破解#include 
using namespace std;int main(){ int sum=0; for(int a=1; a<=9; a++) for(int b=1; b<=9; b++) { if(a==b) continue; for(int c=1; c<=9; c++) { if(c==a||c==b) continue; for(int d=1; d<=9; d++) { if(d==a||d==b||d==c)continue; for(int e=1; e<=9; e++) { if(e==a||e==b||e==c||e==d) continue; for(int f=1; f<=9; f++) { if(f==a||f==b||f==c||f==d||f==e) continue; for(int g=1; g<=9; g++) { if(g==a||g==b||g==c||g==d||g==e||g==f) continue; for(int h=1; h<=9; h++) { if(h==a||h==b||h==c||h==d||h==e||h==f||h==g) continue; for(int i=1; i<=9; i++) { if(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h) continue; int t1=a*c*(100*g+10*h+i); int t2=b*(100*g+10*h+i); int t3=c*(100*d+10*e+f); int t4=10*c*(100*g+10*h+i); if(t1+t2+t3==t4) sum++; } } } } } } } } cout<
<

  

  

 

 

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 快速排序(代码填空)快速排序排序在各种场合经常被用到。快速排序是十分常用的高效率的算法。其思想是:先选一个“标尺”,用它把整个队列过一遍筛子,以保证:其左边的元素都不大于它,其右边的元素都不小于它。这样,排序问题就被分割为两个子区间。再分别对子区间排序就可以了。下面的代码是一种实现,请分析并填写划线部分缺少的代码。-- 框中的代码思路:快速排序,填空位置为经过比较之后,将最初选的“标尺”放在中间,即:标尺左边的数小于标尺,右边的数则大于它。注意不要多填分号。答案:swap(a,p,j)*/#include 
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
x); if(i>=j) break; swap(a,i,j); } // swap(a, p, j); //补充的代码 // return j;}void quicksort(int a[], int p, int r){ if(p

  

 

 

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 抽签(代码填空)抽签X星球要派出一个5人组成的观察团前往W星。其中:A国最多可以派出4人。B国最多可以派出2人。C国最多可以派出2人。....那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。数组a[] 中既是每个国家可以派出的最多的名额。程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBEFFFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF....(以下省略,总共101行)思路:一共选M个人,m经过选择记录剩下可选人数,M-m为已经选择的人数,M-m+j为新加入的人在b数组中的下标。这题在填空之后可以利用总共101行这个条件进行验证,即:在f函数每次printf输出的时候进行统计个数,最后输出sum检测是否为101。注意不要多填分号。答案:f(a,k+1,m-i,b),因为这里i = j .应该 f(a,k+1,m-j,b)也可以。*/#include 
#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

  

 

 

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 方格填数(结果填空)方格填数如图,如下的10个格子,填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。思路:这题方法很简单,暴力求解,依次向每个格子填数与已经填入的进行比较是否连续,即:是否两者之差的绝对值为1。比赛的时候一直在纠结,题干没有说明0~9的数字可以重复使用还是只能用一次,比赛时最后我按照可以重复使用提交的,不知道是不是正确。答案:如果数字不可以重复使用,结果为1580如果数字可以重复使用,结果为206059714*///如果数字不可以重复使用,结果为1580#include 
#include
using namespace std;int main(){ int sum=0; for(int a=0; a<=9; a++) for(int b=0; b<=9; b++) { if(abs(b-a)==1||b==a) continue; for(int c=0; c<=9; c++) { if(abs(c-b)==1||c==a||c==b) continue; for(int d=0; d<=9; d++) { if(abs(d-a)==1||d==a||d==b||d==c) continue; for(int e=0; e<=9; e++) { if(abs(e-a)==1||abs(e-b)==1||abs(e-d)==1||e==a||e==b||e==c||e==d) continue; for(int f=0; f<=9; f++) { if(abs(f-a)==1||abs(f-b)==1||abs(f-c)==1||abs(f-e)==1||f==a||f==b||f==c||f==d||f==e) continue; for(int g=0; g<=9; g++) { if(abs(g-b)==1||abs(g-c)==1||abs(g-f)==1||g==a||g==b||g==c||g==d||g==e||g==f) continue; for(int h=0; h<=9; h++) { if(abs(h-d)==1||abs(h-e)==1||h==a||h==b||h==c||h==d||h==e||h==f||h==g) continue; for(int i=0; i<=9; i++) { if(abs(i-d)==1||abs(i-e)==1||abs(i-f)==1||abs(i-h)==1||i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h) continue; for(int j=0; j<=9; j++) { if(abs(j-e)==1||abs(j-f)==1||abs(j-g)==1||abs(j-i)==1||j==a||j==b||j==c||j==d||j==e||j==f||j==g||j==h||j==i) continue; sum++; } } } } } } } } } cout<
<
// #include
// using namespace std;// int main()// {// int sum=0;// for(int a=0; a<=9; a++)// for(int b=0; b<=9; b++)// {// if(abs(b-a)==1) continue;// for(int c=0; c<=9; c++)// {// if(abs(c-b)==1) continue;// for(int d=0; d<=9; d++)// {// if(abs(d-a)==1) continue;// for(int e=0; e<=9; e++)// {// if(abs(e-a)==1||abs(e-b)==1||abs(e-d)==1) continue;// for(int f=0; f<=9; f++)// {// if(abs(f-a)==1||abs(f-b)==1||abs(f-c)==1||abs(f-e)==1) continue;// for(int g=0; g<=9; g++)// {// if(abs(g-b)==1||abs(g-c)==1||abs(g-f)==1) continue;// for(int h=0; h<=9; h++)// {// if(abs(h-d)==1||abs(h-e)==1) continue;// for(int i=0; i<=9; i++)// {// if(abs(i-d)==1||abs(i-e)==1||abs(i-f)==1||abs(i-h)==1) continue;// for(int j=0; j<=9; j++)// {// if(abs(j-e)==1||abs(j-f)==1||abs(j-g)==1||abs(j-i)==1) continue;// sum++;// }// }// }// }// }// }// }// }// }// cout<
<

  

 

 

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 剪邮票(结果填空)剪邮票如【图1.jpg】, 有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。请你计算,一共有多少种不同的剪取方法。图一+---+---+---+---+| 1 | 2 | 3 | 4 |+---------------+| 5 | 6 | 7 | 8 |+---------------+| 9 | 10| 11| 12|+---+-----------+图二(被选中)2 6 7 11 12图三(被选中)3 5 6 7 10思路:先找到5个数的组合,然后从第一个数字开始遍历,经过上下左右操作检测5个数是否都被访问一遍,如果5个数都可以遍历到则种类+1。在原图中向上为-4,向下为+4,向左为-1,向右为+1,但是遇到3 4 5 7 8这种4+1=5但是这种情况不符合,所以重构一下原图:+---+---+---+---+| 1 | 2 | 3 | 4 |+---------------+| 6 | 7 | 8 | 9 |+---------------+| 11| 12| 13| 14|+---------------+ 这样,向上为-5,向下为+5,向左为-1,向右为+1,避免了每行最后一个+1后等于下一行第一个的情况。答案:116*/#include 
using namespace std;int mp[12]= {1,2,3,4,6,7,8,9,11,12,13,14};int aa[5],vis[5],sum=0;int b[4]= {-1,1,-5,+5};void dfs(int n){ // 首先遍历每一个方向 for(int i=0; i<4; i++) { // 获取各个方向上的下一个数值 int t=aa[n]+b[i]; // 判断获取的数字是否越界 // +-------------------+---+ // | |—4 |—3 |—2 |—1 | | // +-----------------------+ // | 0 | 1 | 2 | 3 | 4 | 5 | // +-----------------------+ // | 5 | 6 | 7 | 8 | 9 | 10| // +-----------------------+ // | 10| 11| 12| 13| 14| 15| // +-----------------------+ // | | 16| 17| 18| 19| | // +---+-------------------+ if(t<1||t>14||t==5||t==10) continue; // 循环访问5个数字 for(int j=0; j<5; j++) // 判断是否可以访问 if(!vis[j] && aa[j]==t) { vis[j]=1; dfs(j); } }}int main(){ // 循环判断 for(int a=0; a<12; a++) for(int b=a+1; b<12; b++) for(int c=b+1; c<12; c++) for(int d=c+1; d<12; d++) for(int e=d+1; e<12; e++) { // 获取五个数字 aa[0]=mp[a]; aa[1]=mp[b]; aa[2]=mp[c]; aa[3]=mp[d]; aa[4]=mp[e]; // 全部重置为未访问 for(int i=0; i<5; i++) vis[i]=0; // 将第一个数字设置为已经访问 // 并从此数字开始进行深度遍历 vis[0]=1; dfs(0); // 判断五个数字是否全部被访问 // 是则 +1,否则进行下一组数字判断 int flag=1;; for(int i=0; i<5; i++) { if(vis[i]!=1) { flag=0; break; } } if(flag==0) continue; else sum++; } cout<
<

  

 

 

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 四平方和(编程大题)四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 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资源约定:峰值内存消耗 < 256MCPU消耗  < 3000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意: 所有依赖的函数必须明确地在源文件中 #include 
, 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。思路:该题为赛前参考题目里的一个代码填空题,暴力解决。*/#include
using namespace std;int main(){ int n; cin>>n; for(int a=0;a<=2237;a++) { if(a*a>n) continue; for(int b=a;b<=2237;b++) { if(a*a+b*b>n) break; for(int c=b;c<=2237;c++) { if(a*a+b*b+c*c>n) break; for(int d=c;d<=2237;d++) { if(a*a+b*b+c*c+d*d>n) break; if(a*a+b*b+c*c+d*d==n) { cout<
<<" "<<<" "<
<<" "<
<

  

 

 

/*2016年第七届蓝桥杯C/C++程序设计本科B组省赛 交换瓶子(编程大题)交换瓶子有N个瓶子,编号 1 ~ N,放在架子上。比如有5个瓶子:2 1 3 5 4要求每次拿起2个瓶子,交换它们的位置。经过若干次后,使得瓶子的序号为:1 2 3 4 5对于这么简单的情况,显然,至少需要交换2次就可以复位。如果瓶子更多呢?你可以通过编程来解决。输入格式为两行:第一行: 一个正整数N(N<10000), 表示瓶子的数目第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。例如,输入:53 1 2 5 4程序应该输出:3再例如,输入:55 4 3 2 1程序应该输出:2资源约定:峰值内存消耗 < 256MCPU消耗  < 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意: 所有依赖的函数必须明确地在源文件中 #include 
, 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。思路:当时做,感觉是个类似选择排序。*/#include
using namespace std;int main(){ int n,a[10000],sum=0; cin>>n; for(int i=0; i
>a[i]; } int minn; for(int i=0; i
a[j]) { minn=j; } } if(minn!=i) { sum++; int t=a[i]; a[i]=a[minn]; a[minn]=t; } } cout<
<

  

转载于:https://www.cnblogs.com/hfultrastrong/p/6437535.html

你可能感兴趣的文章
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
Pylint在项目中的使用
查看>>
使用nginx做反向代理和负载均衡效果图
查看>>
access remote libvirtd
查看>>
(4) Orchard 开发之 Page 的信息存在哪?
查看>>
ASP.NET中 GridView(网格视图)的使用前台绑定
查看>>
深入了解Oracle ASM(二):ASM File number 1 文件目录
查看>>
Boosting(提升方法)之AdaBoost
查看>>
链接元素<a>
查看>>
Binding object to winForm controller through VS2010 Designer(通过VS2010设计器将对象绑定到winForm控件上)...
查看>>
Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)
查看>>
活现被翻转生命
查看>>
POJ 1228
查看>>
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
查看>>
springmvc怎么在启动时自己执行一个线程
查看>>
流操作的规律
查看>>
Python基础学习15--异常的分类与处理
查看>>