蓝桥杯

2016年

[蓝桥杯2016初赛]

网友年龄

时间限制: 1 Sec  内存限制: 256 MB

题目描述

某君新认识一网友。
当问及年龄时,他的网友说:“我的年龄是个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的?

输出

请填写他开始过生日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 为联合主键升序排列,最后输出第一个表示法

输入

输入存在多组测试数据,每组测试数据输入一行为一个正整数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层,共有多少个煤球?

输出

请填表示煤球总数目的数字。

#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
请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)?

输出

请填写表示总页数的数字。

#include<iostream>
using namespace std;
int main()
{
  cout << 1125 - 1 + 1728;
  return 0;
}

[蓝桥杯2016初赛]

平方怪圈

时间限制: 1 Sec  内存限制: 256 MB

题目描述

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入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这个高度。

输入

输入存在多组测试数据,对于每组测试数据输入一行包含一个正整数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层的金字塔形,必须用完所有的积木
下面是两种合格的搭法:

   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表示猜错了。请你计算一下,小明最后手里的电子币数目是多少。

输出

请填写表示最后电子币数目的数字。

#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;
}

 

发表评论

邮箱地址不会被公开。 必填项已用*标注