P8679 题解

· · 题解

题目传送门

A

这很明显是要 DFS,数字也不大,所以无需写程序,在演算纸上简单计算就能算出答案。

答案:490

B

这道题也无需大量程序,由于 2019 较小,所以用简单程序或直接用计算器进行一系列简单计算即可:

首先先算 2019\div26,算出的差是 77.653846153846153846153846153846

先看差的小数部分(即 0.653846153846153846153846153846),将小数部分乘 26,算出的结果是 17,又因为字母表中第 17 个字母是Q,所以答案最后一位就是q

再将 77.653846153846153846153846153846 的整数部分(即 77)除 26 再用小数部分乘 26,结果是 25,字母表中第 25 个字母是Y,所以答案倒数第二个字母是Y

由于 77\div2 的整数部分已经小于 26,所以不用重复上面操作,可得倒数第三个字母也就是第一个字母为字母表中第二个字母B

综上,答案为BYQ.

C

这道题和斐波那契数列差不多,暴力即可。

#include <iostream>
using namespace std;
int main(){
    long long a=1,b=1,c=1,num=0;
    for(int i=4;i<=20190324;i++) {
        num=(a+b+c)%10000;
        c=b;b=a;a=num;
    }
    cout<<num<<endl;
    return 0;
}

输出结果:4659

D

由于题目中要求三个数的和是固定的数,那么其实没有必要进行三层循环,只需要进行两层循环就行,因为只要确定了两个数,第三个数就已经确定了。在判断该数中是否含有数字 24 的时候,可以事先先对从

代码: ```cpp #include<iostream> using namespace std; int matching[2020] = {0}; int chazhao(int n){ while(n){ if(n%10==2||n%10==4) return false; n/=10; } return true; } int main() { int i,sum = 0; for (i=0; i<2020;i++){ if(chazhao(i))matching[i]=1; } int a,b,c; for (a=1; a<2019;a++) { for (b=a+1;b<2019-a;b++) { c=2019-a-b; if(a<b&&b<c&&matching[a]&&matching[b]&&matching[c]&&c>0)sum++; } } cout<<sum<<endl; return 0; } ``` 答案:`40785`。 # E 这道题其实有个简单的方法,无需程序,但需要一定的水平。 方法: 第一步需要将迷宫复制粘贴进 txt 里,然后将 $0$ 和 $1$ 分别替换为“(Tab)$0$”和“(Tab) $1$”。 (Tab)注:在 txt 里敲入 Tab,即可显示一段空白,复制下来就好。 如图所示: ![](https://cdn.luogu.com.cn/upload/image_hosting/5jz9i8oh.png?x-oss-process=image/resize,m_lfit,h_1700,w_2250) 替换完后是这个样子的: ![](https://cdn.luogu.com.cn/upload/image_hosting/j7rw1sso.png?x-oss-process=image/resize,m_lfit,h_1700,w_2250) 然后将 txt 中的内容粘到 Excel 中,就成了下图: ![](https://cdn.luogu.com.cn/upload/image_hosting/t59pq886.png?x-oss-process=image/resize,m_lfit,h_1700,w_2250) 将表格中 $1$ 的底色替换为其他颜色,同理也可以将 $0$ 替换成空格,目的都是为了便于识别。 效果: ![](https://cdn.luogu.com.cn/upload/image_hosting/q2i37c2f.png?x-oss-process=image/resize,m_lfit,h_1700,w_2250) 在截图用画图打开,就能用笔走迷宫了! 无需很多时间,我就只用了二十分钟。 答案: ![](https://cdn.luogu.com.cn/upload/image_hosting/kni4wu04.png?x-oss-process=image/resize,m_lfit,h_1700,w_2250) 答案即`DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR`。 # 最终答案: ``` #include<iostream> using namespace std; int main() { string ans [] = { "490", // 双引号中替换为 A 题的答案 "BYQ", // 双引号中替换为 B 题的答案 "4659", // 双引号中替换为 C 题的答案 "40785", // 双引号中替换为 D 题的答案 "DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR", // 双引号中替换为 E 题的答案 }; char T; cin >> T; cout << ans[T - 'A'] << endl; return 0; } ```