蓝桥杯打卡-Day3

酶和ATP 2022年03月10日 840次浏览

年龄巧合-2014国赛

https://www.lanqiao.cn/problems/694/learning/

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小明和他的表弟一起去看电影,有人问他们的年龄。小明说:今年是我们的幸运年啊。我出生年份的四位数字加起来刚好是我的年龄。表弟的也是如此。已知今年是 2014 年,并且,小明说的年龄指的是周岁。

请推断并填写出小明的出生年份。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

直接暴力解决,算出来两个数19882006
问的是小明的出生日期(而不是他弟弟的,那当然是1988了。

#include <iostream>
using namespace std;
// 开始时间
const int START = 1950;
const int NOW = 2014;

int age(int n) {
    int ages = 0;
    while (n) {
        ages += n % 10;
        n /= 10;
    }
    return ages;
}

int main() {
    for (int i = START; i < NOW; i++)
        if ((NOW - i) == age(i)) cout << i << endl;
    return 0;
}

纸牌三角形-2014省赛

https://www.lanqiao.cn/problems/639/learning/

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

A,2,3,4,5,6,7,8,9 共 9 张纸牌排成一个正三角形(A 按 1 计算)。要求每个边的和相等。 下图就是一种排法。

这样的排法可能会有很多。

如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?

请你计算并提交该数字。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

暴力 DFS 即可
解释一下最后为啥是/ 6
三边可以互换位置要/ 3,每一次旋转都有左右颠倒两种可能所以还要/ 2
题目只说旋转镜像是同一种,所以中间两个数互换位置是两种情况哦,不需要减去。

#include <iostream>
using namespace std;

const int MAX = 7 + 8 + 9 + 10;
bool used[10];
// 用来模拟金字塔的树组
int w[10];
// 计数
int cnt;

// 现在在选第几位
void dfs(int u) {
    // 现在选的如果超过第 9 位
    if (u > 9) {
        //  那就判断是否符合条件
        int f1 = w[1] + w[2] + w[3] + w[4];
        int f2 = w[4] + w[5] + w[6] + w[7];
        int f3 = w[7] + w[8] + w[9] + w[1];
        // 如果符合就加一
        if (f1 == f2 && f2 == f3) cnt++;
        return;
    } else {
        // 如果没过,就循环选择这个位数上的数字
        for (int i = 1; i <= 9; i++)
            // 如果这个数字没用过
            if (!used[i]) {
                // 选择它
                used[i] = true;
                w[u] = i;
                dfs(u + 1);
                // 选完了记得还原现场
                used[i] = false;
                w[u] = 0;
            }
    }
}

int main() {
    dfs(1);
    cout << cnt / 6 << endl;
    // 三边可以互换位置要`/ 3`,每一次旋转都有左右颠倒两种可能所以还要`/ 2`。
    return 0;
}

取球游戏-2012省赛

https://www.lanqiao.cn/problems/278/learning/

题目描述

今盒子里有 n 个小球,A、B 两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。

我们约定:

每个人从盒子中取出的球的数目必须是:1,3,7 或者 8 个。轮到某一方取球时不能弃权!A 先取球,然后双方交替取球,直到取完。被迫拿到最后一个球的一方为负方(输方)

请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A 是否能赢?

输入描述

先是一个整数 n (n<100),表示接下来有 n 个整数。

然后是 n 个整数,每个占一行(整数< 10^4),表示初始球数。

输出描述

程序则输出 n 行,表示 A 的输赢情况(输为 0,赢为 1)。

输入输出样例

示例

输入

4
1
2
10
18

输出

0
1
1
0

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M
不会。