2016年
[蓝桥杯2016初赛]
网友年龄
时间限制: 1 Sec 内存限制: 256 MB
题目描述
某君新认识一网友。
当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?
当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?
输出
请填写表示可能情况的种数。
#include<iostream>
using namespace std;
int main()
{
int t = 0;
for (int i = 1; i <= 9; i++)
for (int j = 0; j <= 9; j++)
if (i * 10 + j - 27 == i + j * 10)t++;
cout << t;
return 0;
}
[蓝桥杯2016初赛]
生日蜡烛
时间限制: 1 Sec 内存限制: 256 MB
题目描述
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
输出
请填写他开始过生日party的年龄数。
#include<iostream>
using namespace std;
int main()
{
for (int i = 0;; i++)//从i岁开始过生日
for (int j = i + 1; j < 150; j++)//今年j岁
if (((i + j)*(j - i + 1)) / 2 == 236){ cout << i ; return 0; }
return 0;
}
[蓝桥杯2016初赛]
四平方和
时间限制: 1 Sec 内存限制: 256 MB
题目描述
四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。
比如:
5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2(^符号表示乘方的意思)
对于一个给定的正整数N,可能存在多种平方和的表示法。
要求你对4个数排序:0 <= a <= b <= c <= d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法
如果把0包括进去,就正好可以表示为4个数的平方和。
比如:
5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2(^符号表示乘方的意思)
对于一个给定的正整数N,可能存在多种平方和的表示法。
要求你对4个数排序:0 <= a <= b <= c <= d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法
输入
输入存在多组测试数据,每组测试数据输入一行为一个正整数N (N<5000000)
输出
对于每组测试数据,要求输出4个非负整数,按从小到大排序,中间用空格分开
样例输入
5
12
773535
样例输出
0 0 1 2
0 2 2 2
1 1 267 838
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
A: while (cin >> n)
{
//三重循环节省时间
for (int a = 0; a <= sqrt(n - 3 * a*a); a++)//已知a时,b、c、d最小取a
for (int b = a; b <= sqrt(n - a*a - 2 * b*b); b++)//已知a,b时,c、d最小取b
for (int c = b; c <= sqrt(n - a*a - b*b - c*c); c++)//已知a,b,c时,d最小取c
{
int d = sqrt(n - a*a - b*b - c*c);
if (a*a + b*b + c*c + d*d == n){ cout << a << " " << b << " " << c << " " << d << endl; goto A; }
}
}
return 0;
}
[蓝桥杯2016初赛]
煤球数目
时间限制: 1 Sec 内存限制: 256 MB
题目描述
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
….
如果一共有100层,共有多少个煤球?
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
….
如果一共有100层,共有多少个煤球?
输出
请填表示煤球总数目的数字。

这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
#include<iostream>
using namespace std;
int main()
{
int num = 0;
for (int i = 1; i <= 100; i++)
{
int n = (1 + i)*i / 2;
num += n;
}
cout << num;
return 0;
}
[蓝桥杯2016初赛]
凑算式
时间限制: 1 Sec 内存限制: 256 MB
题目描述

这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
输出
输出一个整数表示答案
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int n = 0;
do
{
//需要通分、移项变成乘式进行判断
if ((a[0] * a[2] + a[1])*(a[6] * 100 + a[7] * 10 + a[8]) + a[2] * (a[3] * 100 + a[4] * 10 + a[5]) == 10 * a[2] * (a[6] * 100 + a[7] * 10 + a[8]))n++;
} while (next_permutation(a, a + 9));//全排列
cout << n;
return 0;
}
[蓝桥杯2016初赛]
报纸页数
时间限制: 1 Sec 内存限制: 256 MB
题目描述
X星球日报和我们地球的城市早报是一样的,都是一些单独的纸张叠在一起而已。每张纸印有4版。
比如,某张报纸包含的4页是:5,6,11,12,可以确定它应该是最上边的第2张报纸。
我们在太空中捡到了一张X星球的报纸,4个页码分别是:1125,1126,1727,1728
请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)?
比如,某张报纸包含的4页是:5,6,11,12,可以确定它应该是最上边的第2张报纸。
我们在太空中捡到了一张X星球的报纸,4个页码分别是:1125,1126,1727,1728
请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)?
输出
请填写表示总页数的数字。
#include<iostream>
using namespace std;
int main()
{
cout << 1125 - 1 + 1728;
return 0;
}
[蓝桥杯2016初赛]
平方怪圈
时间限制: 1 Sec 内存限制: 256 MB
题目描述
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
输出
输出答案即可
#include<iostream>
using namespace std;
int divide(int n, int *a);
int main()
{
int n = 2;//起始数
for (int i = 0; i < 20; i++)//循环20次得到20个结果
{
int a[5] = { 0 };
int t = divide(n, a);
int res = 0;
for (int j = 0; j < t; j++)
res += a[j] * a[j];
//cout << res << endl;//观察结果
n = res;
}
cout << 145;
return 0;
}
int divide(int n, int *a)
{
int t = 0;
a[t++] = n % 10;
while (n / 10)
{
n /= 10;
a[t++] = n % 10;
}
return t;
}
[蓝桥杯2016初赛]
冰雹数
时间限制: 6 Sec 内存限制: 256 MB
题目描述
任意给定一个正整数N,如果是偶数,执行: N / 2;如果是奇数,执行: N * 3 + 1
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如N=9:9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如N=9:9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。
输入
输入存在多组测试数据,对于每组测试数据输入一行包含一个正整数N(N<1000000)
输出
对于每组测试数据,输出一行包含一个正整数表示答案
样例输入
10
100
样例输出
52
9232
#include<iostream>
using namespace std;
int main()
{
int N;
while (cin >> N)
{
long long int max = 0;
for (int i = N; i >= 1; i--)
{
long long int j = i;
long m_max = 0;
do
{
if (j % 2 == 0)j /= 2;
else j = j * 3 + 1;
if (j > m_max)m_max = j;
} while (j != 1);
if (m_max > max)max = m_max;
}
cout << max << endl;
}
return 0;
}
[蓝桥杯2016初赛]
搭积木
时间限制: 1 Sec 内存限制: 256 MB
题目描述
小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木
下面是两种合格的搭法:
搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木
下面是两种合格的搭法:
0
1 2
3 4 5
6 7 8 9
0
3 1
7 5 2
9 8 6 4
请你计算这样的搭法一共有多少种?
输出
一个整数表示答案
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
/*int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int ans = 0;
do
{
if ((a[1] > a[0] && a[2] > a[0]) && (a[3] > a[1] && a[4] > a[1]) && (a[4] > a[2] && a[5] > a[2]) && (a[6] > a[3] && a[7] > a[3]) && (a[7] > a[4] && a[8] > a[4]) && (a[8] > a[5] && a[9] > a[5]))ans++;
} while (next_permutation(a, a + 10));
cout << ans;*/
cout << 768;
return 0;
}
[蓝桥杯2016初赛]
有奖猜谜
时间限制: 1 Sec 内存限制: 256 MB
题目描述
小明很喜欢猜谜语。最近,他被邀请参加了X星球的猜谜活动。
每位选手开始的时候都被发给777个电子币。
规则是:猜对了,手里的电子币数目翻倍,猜错了,扣除555个电子币, 扣完为止。
小明一共猜了15条谜语。战果为:vxvxvxvxvxvxvvx
其中v表示猜对了,x表示猜错了。请你计算一下,小明最后手里的电子币数目是多少。
每位选手开始的时候都被发给777个电子币。
规则是:猜对了,手里的电子币数目翻倍,猜错了,扣除555个电子币, 扣完为止。
小明一共猜了15条谜语。战果为:vxvxvxvxvxvxvvx
其中v表示猜对了,x表示猜错了。请你计算一下,小明最后手里的电子币数目是多少。
输出
请填写表示最后电子币数目的数字。
#include<iostream>
using namespace std;
int main()
{
/*int num = 777;
int res[15] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0 };
for (int i = 0; i < 15; i++)
{
if (res[i])num *= 2;
else num -= 555;
cout << num << endl;
if (num <= 0)break;
}
cout << num;*/
cout << 58497;
return 0;
}