2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580。条件应为abs(a[3]-a[7])!=1
,宝宝心理苦啊!!感谢zzh童鞋的提醒。
勘误2:第7题在判断连通的时候条件写错了,后两个if条件中是应该是<=12 落了一个等于号,正确答案应为116。
1.煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
….
如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
解题思路
第n层的煤球数是n*(n+1)/2个,共100层,放进for循环累加一下。注意求的是前一百层一共,答案为171700
代码
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
long long x=0;
for(int i=1;i<101;i++){
//printf("i:%d\n",(1+i)*(i)/2);
x+=(1+i)*(i)/2;
}
printf("x:%lld\n",x);
return 0;
}
2.生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
解题思路
假设他从第i年开始过,一共过了k年,写两个for穷举一下,1-100范围内,利用等差数列求和公式,满足这个式子的 (2∗i+k)∗(k+1)==472 就是答案,最后答案为26。
代码
#include <cstdio>
int main(){
for(int i=1;i<100;i++){
for(int k=1;k<100;k++){
if((2*i+k)*(k+1)==472){
printf("i:%d k:%d\n",i,k);
}
}
}
return 0;
}
3.凑算式
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
解题思路
利用c++中的全排列函数全排列一下1-9,然后条件判断一下就可以了。
答案为29
代码
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
// a,b,c,d,e,f,g,h,i
int a[10]={
1,2,3,4,5,6,7,8,9},count=0;
do{
int ghi=(a[6]*100+a[7]*10+a[8]);
int def=a[3]*100+a[4]*10+a[5];
if((a[0]*a[2]*ghi)+(a[1]*ghi)+(def*a[2])==10*a[