字符迷宫(期末考模拟题)

很有趣的一道题

难点主要在于对于' * '的处理

题目描述的是可以多次匹配相同的字母,这就涉及到两个方面:

一是这个匹配的相同的字母如何储存

二是当你’ * ‘位置递归结束的时候,你该什么时候变回‘ * ’号

这里给出我的思路,如果此地是‘ * ’号的话,就减去匹配的字母(结果一定是小于0),然后用一个计数器来记录此时递归是第几次利用该‘ * ’号

代码如下:

#include<stdio.h>
#include<ctype.h>
#include<string.h>
void dg(int x, int y, int l);
int num[500][500];
bool occ[500][500];
char maze[500][500], str[101];
int m, n, len, id, length, id_r;int main(void)
{//输入scanf("%d%d", &m, &n);for(int i = 0; i < m; i++){getchar();for(int j = 0; j < n; j++)maze[i][j] = tolower(getchar());}scanf("%s", str);//开始递归length = (int)strlen(str);for(id = 0; id < length - len; id++){//确定起始位置for(int i = 0; i < m; i++)for(int j = 0; j < n; j++)if(maze[i][j] == str[id] || maze[i][j] == '?' || maze[i][j] == '*')dg(i, j, 1);}for(int i = 0; i < len; i++)printf("%c", str[id_r + i]);return 0;
}
void dg(int x, int y, int l)
{//不满足条件的返回if(x < 0 || y < 0 || x >= m || y >= n || l > length - id || occ[x][y])  return;if(maze[x][y] != str[id + l - 1] && isalpha(maze[x][y]))  return;if(maze[x][y] < 0 && '*' - maze[x][y] != str[id + l - 1])  return;//占用的处理if(maze[x][y] != '*' && maze[x][y] > 0)  occ[x][y] = true;else if(maze[x][y] == '*'){maze[x][y] -= str[id + l - 1];  num[x][y]++;}else if(maze[x][y] < 0)  num[x][y]++;//继续递归dg(x, y, l + 1);dg(x + 1, y, l + 1), dg(x - 1, y, l + 1), dg(x, y + 1, l + 1), dg(x, y - 1, l + 1);dg(x + 1, y + 1, l + 1), dg(x + 1, y - 1, l + 1), dg(x - 1, y + 1, l + 1), dg(x - 1, y - 1, l + 1);//返回前的重置occ[x][y] = false;if(maze[x][y] < 0 && --num[x][y] == 0)  maze[x][y] = '*';//得到最大长度if(len < l){len = l;  id_r = id;}return;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/282242.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web安全漏洞分析—文件包含

在当今数字化时代&#xff0c;随着Web应用程序的广泛应用&#xff0c;网络安全问题愈加凸显。其中&#xff0c;文件包含漏洞作为一种常见但危险的安全隐患&#xff0c;为恶意攻击者提供了可乘之机。在这篇博客中&#xff0c;我们将深入探讨文件包含漏洞的本质、攻击手法以及应对…

MeterSphere files 任意文件读取漏洞复现 (CVE-2023-25573)

0x01 产品简介 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准。 0x02 漏洞概述 MeterSphere /api/jmeter/download/files 路径文件存在文件读取漏洞,攻击者可通过该漏洞读取系统重要…

uniapp使用vue3的ref获取dom元素出现undefined

在我的代码里面&#xff0c;已经通过ref来定义想要获取的dom了&#xff0c;但是最后在页面渲染完之后&#xff0c;打印这个dom发现竟然是undefined&#xff1a; 获取不到dom元素&#xff1a; 最后查资料发现&#xff1a; 小程序中&#xff0c;uniapp的ref要绑定在子组件中才能…

银行数字化转型导师坚鹏:银行数字化转型正在重塑您的工作

您好&#xff0c;我是银行数字化转型导师坚鹏。坚持知行果合一&#xff0c;赋能数字化转型&#xff01;非常荣幸和您分享关于银行数字化转型如何影响老百姓工作的一些思考。 您知道吗&#xff1f;银行数字化转型给您的工作方式带来新变化、新趋势、新潮流啦&#xff01;在这个…

电脑技巧:笔记本电脑保养技巧诀,让你的电脑多用几年

新到手的宝贝笔记本电脑爱不释手&#xff0c;要想它长久的陪伴&#xff0c;平时的维护与保养自然不能少&#xff0c;今天小编给大家分享一下&#xff0c;如何保养和维护笔记本的各个部件。 一、电 池 电池是笔记本实现移动办公的重要部件&#xff0c;电池状况直接影响了电池的…

1.electron之纯原生js/jquery的桌面应用程序(基础篇)

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

技术分享 | 接口测试价值与体系

如果把测试简单分为两类&#xff0c;那么就是客户端测试和服务端测试。移动端的测试包括 UI 测试&#xff0c;兼容性测试等&#xff0c;服务端测试包括接口测试。接口测试检查数据的交换、传递和控制管理过程。它绕过了客户端&#xff0c;直接对服务端进行测试。 接口测试的价值…

实验报告九、使用枚举法验证6174猜想

一、实验目的&#xff1a; 1、了解6174猜想的内容。 2、熟练使用选择结构和循环结构。 3、了解标准库itertools中combinations()函数的用法。 4、熟练使用字符串的join&#xff08;方法。 5、熟练使用内置函数int()、str()、 sorted()。 二、实验内容&#xff1a; 1955…

【XR806开发板试用】+2.鸿蒙内核

非常感谢基于安谋科技STAR-MC1的全志XR806 Wi-FiBLE开源鸿蒙开发板试用活动&#xff01;非常感谢极术社区&#xff01;非常感谢极术小姐姐&#xff01;非常感谢全志在线开发者社区&#xff01;非常感谢通过试用申请&#xff01;非常感谢安谋科技&#xff01; 接上一篇&#xff…

视频数据卡设计方案:120-基于PCIe的视频数据卡

一、产品概述 基于PCIe的一款视频数据收发卡&#xff0c;并通过PCIe传输到存储计算服务器&#xff0c;实现信号的采集、分析、模拟输出&#xff0c;存储。 产品固化FPGA逻辑&#xff0c;实现PCIe的连续采集&#xff0c;单次采集容量2GB&#xff0c;开源的PCIe QT客…

交叉熵在机器学习里做损失的意义

交叉熵是机器学习中常用的损失函数之一&#xff0c;特别适用于分类任务。其背后的核心思想是衡量两个概率分布之间的差异。在分类问题中&#xff0c;通常有一个真实分布&#xff08;ground truth distribution&#xff09;和一个模型预测的分布&#xff08;predicted distribut…

信号与线性系统预备训练3——MATLAB软件在信号与系统中的应用初步

信号与线性系统预备训练3——MATLAB软件在信号与系统中的应用初步 The Preparatory training3 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、目的 1.熟悉和回顾MATLAB…