ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

蓝桥杯训练题No.7

2022-03-02 21:00:56  阅读:210  来源: 互联网

标签:No.7 训练 tx ty int father 蓝桥 && now


Q1:小明用字母 AA 对应数字 11,BB 对应 22,以此类推,用 ZZ 对应 2626。请问 2019对应的字符串是什么?

#include<bits/stdc++.h>
using namespace std;

int main() {
	string str;
	int n;cin>>n;
	whihle(n) {
		n--;
		int a = n%26;
		str += 'A' + a;
		n /= 26;
	}
	reverse(str.begin(), str.end());
	cout<<str;
	return 0;
}

Q2:把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?

//这个小题目有不少东西
#include<bits/stdc++.h> 
using namespace std;
#define int long long 

bool check(int a) {
	while(a) {
		if(a%10 == 2||a%10 == 4) return false;
		a/=10;
	}return true;
}

signed main() {
	int ans = 0;
	for(int i = 1; i <= 2016; i++)	{
		for(int j = i + 1; j <= 2016; j++) {//j保证比 i大 
		    int	k = 2019 - i - j;//没有把 i + j + k = 2019作为判断的条件,而是直接当作换算条件用,减少了循环的嵌套
			if(check(i)&&check(j)&&check(k)&&i<j&&j<k) ans++; //规定好大小既能解决一组数据间重复的问题,用能解决不同组数据重复的问题
		}
	}
	
	cout<<ans;
	return 0;
}

Q3:下图给出了一个迷宫的平面图,其中标记为 11 的为障碍,标记为 00 的为可以通行的地方。
010000
000100
001001
110000
迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这个它的上、下、左、右四个方向之一。对于上面的迷宫,从入口开始,可以按 DRRURRDDDR 的顺序通过迷宫, 一共 1010 步。其中D、U、L、R分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(3030 行 5050列),请找出一种通过迷宫的方式,其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。
(请注意在字典序中 D<L<R<U。)

#include<bits/stadc++.h>
using namespace std;
#define int long long  

#define ROWS 4
#definr COLS 6
string maze[ROWS] = {
	"010000",
	"000100",
	"001001",
	"110000"
}; 
dir[4][2] = {
	{1, 0},
	{0, -1},
	{-1, 0},
	{0, -1}
};string dirs = "RDLU";

struct Node {
	int x, y;
	chat pos;//指代方向 (上一个结点到它的方向) 
};
queue<Node> Q;
int visited[ROWS][COLS];

Node father[ROWS][COLS];记录每个位置[x][y]的父节点,father[x][y].x是上一个结点的x坐标 
Node start, now, next;

int check(int tx, int ty) {//检查移动的点有没有超过边界 
	return (tx >= 0&&<tx < ROWS&&y >= 0&&ty < COLS);
} 

void dfs(int x, int y) {
	if(x == 0&&y == 0) return;//找到入口
	else {
		//此处可逆序输出
		dfs(father[x][y].x, father[x][y].y);
		cout<<father[x][y].pos;//回退时输出路径 (此处可正序输出) 
	} 
} 

signed main() {
	int i ,tx, ty;
	//起点配置
	start.x = 0; start.y = 0; Q.push(start); visited[0][0] = 1; 
	//开始
	while(!Q.empty()) {
		now = Q.front(); Q.pop();
		if(now.x == ROWS - 1&&now.y == COLS - 1) break;
		for(i = 0; i < 4; i++) {
			tx = now.x + dir[i][0]; ty = now.y + dir[i][1];//移动now点 (但此时now的(x,y)没有变)
			if(check(tx, ty)&&!mage[tx][ty]&&visited[tx][ty] == 1) {
				//开始结点下移,将now结点(不是(tx,ty)结点)赋给父结点 
				visited[tx][ty] = 1;
				father[tx][ty].x = now.x;
				father[tx][ty].y = now.y; 
				father[tx][ty].pos = dirs[i];//记载从(x,y)到(tx, ty)的移动方向 
				next.x = tx;  next.y = ty; Q.push(next);//next接收了移动后的坐标 入队 队不为空 
			}	
		}
	} 
	dfs(ROWS - 1, COLS - 1);
	return 0;
}

标签:No.7,训练,tx,ty,int,father,蓝桥,&&,now
来源: https://blog.csdn.net/m0_55825393/article/details/123165177

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有