一、平方序列
题目链接:平方序列 - 蓝桥云课 (lanqiao.cn)
题目要求:
小明想找到两个正整数 XX 和 YY,满足
1.2019
2.2019^2, X^2, Y^2 组成等差数列。
请你求出在所有可能的解中,X + YX+Y 的最小值是多少?
解题思路:
暴力
#include<bits/stdc++.h> using namespace std; int main() { for(int i=2020;i<10001;i++) { int x = i*i*2-2019*2019; int y = sqrt(x); if(y*y==x) { cout<<i+y; return 0; } } }
二、穿越雷区
题目链接:穿越雷区 - 蓝桥云课 (lanqiao.cn)
题目要求:
X 星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
某坦克需要从 A 区到 B 区去( A,B 区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?
已知的地图是一个方阵,上面用字母标出了 A,B 区,其它区都标了正号或负号分别表示正负能量辐射区。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
坦克车只能水平或垂直方向上移动到相邻的区。
解题思路:
BFS模板哦
#include<bits/stdc++.h> using namespace std; const int N = 101; char s[N][N]; int dx,dy,tx,ty,n; int ddx[]={1,0,0,-1}; int ddy[]={0,1,-1,0}; int vis[N][N]; struct node{ int x,y,t; char b; }; int bfs() { vis[dx][dy] = 1; queue<node>q; q.push({dx,dy,0,'r'}); while(q.size()) { node z = q.front(); q.pop(); if(z.x==tx&&z.y==ty) { return z.t; } for(int i=0;i<4;i++) { int x = z.x+ddx[i]; int y = z.y+ddy[i]; if(!vis[x][y]&&x>0&&y>0&&x<=n&&y<=n&&s[x][y]!=z.b) { q.push({x,y,z.t+1,s[x][y]}); vis[x][y] = 1; } } } } int main() { cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>s[i][j]; if(s[i][j]=='A') { dx=i; dy=j; } if(s[i][j]=='B') { tx=i; ty=j; } } } cout<<bfs(); return 0; }