// 16年蓝桥杯B组原题及解答
贪玩巴斯使用的是 c plusplus
第一题
题目:
/*
煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
....
如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的容或说明性文字。
*/
答题源程序:
/**
AchesonD16
2021年7月10日 PM11:35
*/
#include<iostream>
using namespace std;
int main()
{
int arr[101] = {0};
for(int i = 1; i < 101; i++)
arr[i] = arr[i-1] + i;
int add = 0;
for(int j = 1; j < 101; j++)
add = add + arr[j];
cout << add << endl;
return 0;
}
个人解析心得:
/*
我们可以发现 1 = 1; 1+2 = 3; 1+2+3 = 6; 1+2+3+4 = 10 符合题意,他们是等差数列求和(1一直往后加)
我们考虑使用一个数组来存储每一个排的煤球个数,再用add来计算总和,把每一排一次加起来。
*/
第二题
题目:
生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的容或说明性文字。
// c语言版本
#include<stdio.h>
int main()
{
int start,end;
for(start = 1 ; start < 236 ; start ++)
{
for( end = start ; end < 236 ; end ++ )
{
int sum = 0;
for(int i = start; i <= end; i ++)
sum += i;
if( sum == 236)
{
printf("start : %d end : %d\n",start,end);
}
}
}
return 0;
}
// c++版本
#include <iostream>
using namespace std;
int main()
{
for(int i = 1; i < 100; i++) // 从 1 到 100 岁挨个开始计算
{
int sum = 0; // 蜡烛(年龄)总和数
for (int j = i; j < 100; j++) // 带入每个年龄,这里的开始年龄不同
{
sum += j;
if(sum==236) // 如果等于了
{
cout << i << endl;
}
else if( sum > 236 )
{
break;
}
}
}
return 0;
}
心得 :
一、
当使用 if...else if...else 语句时,以下几点需要注意:
一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。
一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。
二、
要明白我们使用的是计算机,那么我们可以利用它强大的计算能力来计算,这道题的关键就是可以利用计算机让他从1岁开始到100岁,挨个岁数开始去计算总和,看总和是否等于236,满足的话就cout输出。