回文词(Uva 401)

2023-11-02

输入一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓回文串,就是反转以后与原串相同,如abba和madam。所谓镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符。(空白项表示该字符镜像后不能得到一个合法字符。)

输入的每行包含一个字符串,(保证只有上述字符。不含空白字符),判断它是否为回文串和镜像串(共四种组合)。每组数据之后输出一个空行。
样例输入:
NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA
样例输出:
NOTAPALINDROME – is not a palindrome.

ISAPALINILAPASI – is a regular palindrome.

2A3MEAS – is a mirrored string.

ATOYOTA – is a mirrored palindrome.

第一版思路:回文词:新建一个数组存放原串的反转数组,两者用strcmp()比较。
镜像词:由于没有分析清楚镜像词的特点,认为仅仅只需判断字符串中的字符均存在镜像就可以了。

(没用的代码如下:)

#include <stdio.h>
#include <string.h>

const char mirrored[]="AEHIJLMOSTUVWXYZ12358";
const int maxn=10000;
const char specialChar[]="EJSZ52L3";

int main(){
    char str[maxn],reverse[maxn];
    bool isPalindrome,isMirrored;
    memset(str,0,sizeof(str));
    memset(reverse,0,sizeof(reverse));
    while(scanf("%s",str)==1){
        isMirrored=true;
        int len=strlen(str)-1;

        for(int i=0;i<strlen(str);i++){
            reverse[len--]=str[i];                    //复制到另一个数组中,以判断是否为回文词 
            if(isMirrored&&(strchr(mirrored,str[i])==NULL)) isMirrored=false;   //判断是不是镜像词,(第一步,将含有不在mirroed中的字符剔除,第二步见下面补充)
        }
        if(strcmp(reverse,str)==0) isPalindrome=true;
        else isPalindrome=false;    



----------


        if(isPalindrome&&isMirrored) printf("%s -- is a mirrored palindrome.\n\n",str);
        else if(isPalindrome&&!isMirrored) printf("%s -- is a regular palindrome.\n\n",str);
        else if(!isPalindrome&&isMirrored) printf("%s -- is a mirrored string.\n\n",str);
        else printf("%s -- is not a palindrome.\n\n",str);

    memset(str,0,sizeof(str));
    memset(reverse,0,sizeof(reverse));

    }
    return 0;
}

测试的时候,输入 2 ,结果不对。
反思:镜像词在每种意义上是“回文词”,如2AEM3AS,可以看做为:2AEMEA2。所以改进的重心放在了处理镜像不是自己本身的字符上。 在——处插入下面的代码。
(还是没用的代码:)

        int j=0;
        while(isMirrored&&j<=strlen(str)/2){
                for(int k=0;k<8;k++){
                    if(specialChar[k]==str[j]){
                        if(str[strlen(str)-1-j]!=specialChar[7-k]){//这里的strlen(str)-1不能用len代替,因为在上面的代码中len的值在改变。(这里导致了错误,用输出中间值法找到的。)
                            isMirrored=false;
                            break;
                        } 
                    }
                }
            j++; 
        }

结果123ES1结果正确,但是123ESI结果不正确。
反思:没有从一开始将镜像词的特点把握。导致出错时又不想重新改变思路,加上考虑不周全,思想漏洞太多,进而继续做很多无用功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

回文词(Uva 401) 的相关文章

  • Celery介绍以及使用

    文章目录 celery 一 什么是celery 1 celery是什么 2 使用场景 3 Celery的优点 4 Celery的安装 二 Celery执行异步任务 1 创建异步任务执行文件 消费者 2 创建生产者文件 3 创建result文
  • InnoDB引擎架构

    逻辑存储结构 表空间 ibd文件 一个mysql实例可以对应多个表空间 用于存储记录 索引等数据 段 分为数据段 索引段 回滚段 InnoDB是索引组织表 数据段就是B 树的叶子节点 索引段即为B 树的非叶子节点 段用来管理多个Extent
  • Vue中vuex的使用(三)

    vuex中getters的使用 1 概念 当state中的数据需要经过加工后再使用时 可以使用getters加工 2 在store js中追加getters配置 准备getter 用于将state中sum加工 const getters b
  • vue如何获取当前页面的url

    如果你使用 vue router 文档在这里 路由信息对象的属性 const routes path portfolio year review component Portfolio 这个样子获取 this route params ye
  • 二十一.数据结构学习笔记.1

    一 抽象数据类型 抽象数据类型 Abstract Data Type ADT 是一些操作的集合 抽象数据类型是数学的抽象 在ADT定义中根本没涉及如何实现这些操作 例如 表 集合 图及它们的操作 它们都可以看作抽象数据类型 就像整数 实数和
  • cmake:if

    有条件地执行一组命令 概要 if
  • java笔记:抽象方法与抽象类

    抽象方法和抽象类 1 规则 抽象方法和抽象类必须用abstract进行修饰 有抽象方法的类只能被定义为抽象类 抽象类中可以没有抽象方法 抽象类不能被实例化 无法使用new调用抽象类的构造器创建抽象类的实例 无法创建实例 抽象类中可以包含成员
  • 网络安全渗透测试实验一

    1 实验目的和要求 理解网络扫描 网络侦察的作用 通过搭建网络渗透测试平台 了解并熟悉常用搜索引擎 扫描工具的应用 通过信息收集为下一步渗透工作打下基础 系统环境 Kali Linux 2 Windows 网络环境 交换网络结构 实验工具
  • pyqt5数据库使用教程

    1 关于连接sqlite数据库时使用QSqlTableModel模型查看具体数据 通过行号 列名称来获取某单元格的数据 注 model中的一行称为一条record 一列称为一条field 方法 1 使用QSqlRecord类 QSqlRec
  • Python中的pass语句详解

    作者 永劫 一 概述 在本文中 我们将详细介绍Python中的pass语句 包括其定义 作用以及使用场景 pass语句在Python编程中是一个实用的占位符 它可以让程序运行在某些特定的情况下 而不引发任何错误 二 pass语句的定义 pa
  • scrapy框架之post请求

    scrapy框架之post请求 1 post请求 2 通过scrapy框架用爬虫发起post请求 3 使用Scrapy框架破解验证码 1 post请求 首先从浏览器打开百度翻译 去抓一下接口 右键检查 一开始是network是什么都没有的
  • 在ubuntu上安装pcl库并配置vscode使用cmake生成可执行文件

    文章目录 在ubuntu上安装pcl库并配置vscode使用cmake生成可执行文件 先列举一下我踩的坑 一 安装vtk7 1 QT5 12 6 VTK7 1 1 二 安装pcl1 9 1 安装依赖库 安装PCL库 三 使用vscode c
  • 根据对象的某一个属性排序

    根据lenval进行排序 思路 使用sort函数 const obj any ID 1 lenval 1 ID 2 lenval 3 ID 3 lenval 2 function compare property return functi
  • Scrapy命令行详解

    官方文档 1 创建项目 scrapy startproject myproject project dir 这将在project dir目录下创建一个Scrapy项目 如果project dir没有指定 project dir将与mypro

随机推荐

  • [运维]python 启用http 文件服务

    要在Python中启用HTTP文件服务 您可以使用内置的http server模块 在Python 3中 或SimpleHTTPServer模块 在Python 2中 在Python 3中 python m http server 在Pyt
  • @CacheEvict 清除多个key

    借用 Caching实现 入参是基本类型的 Caching evict CacheEvict value Cache CONSTANT key CacheKey SINGLE ROLE NAME roleId CacheEvict valu
  • 遗传算法程序 matlab(转)

    遗传算法程序 matlab 一 本程序收集于网络 本人并未运行 如有问题请与作者联系 如有侵权请告之 转载 http hi baidu com hopeasy blog item c82182c302781650b319a802 html
  • DirectX11 顶点和顶点布局

    顶点和顶点布局 1 如何描述顶点 5 5 1节已经讲过 在Direct3D中 顶点由空间位置和各种附加属性组成 Direct3D可以让我们灵活地建立属于我们自己的顶点格式 换句话说 它允许我们定义顶点的分量 要创建一个自定义的顶点格式 我们
  • Build finished with errors/Executable Not Found

    项目场景 iOS工程 点击运行 或者点击编译 问题描述 能运行起来 但是报错 报错内容如下图 报了build finished with errors的错误 但是具体原因却没有提示 原因分析 编译的错误 但是工程却能运行起来 就很奇怪 报错
  • JAVA数据集合:Set与Get效率对比

    1 实例测试代码 pre class java 1 ArrayList set sort elements and list elements public static void printArrList List pre
  • line-height:1;的理解

    先看张图吧 line height如上图的两条基线的距离 即两条大红线的距离 也可以说是两条蓝线的距离 如图中标注 但是严谨地说应该是两条基线的距离 这也就解释为什么line height和height的值一样的时候 为什么就是行内元素居中
  • Java 4-3、项目运行环境配置

    项目运行环境配置 注 使用Spring自带的application properties 目的 一次性配置开发环境和正式环境不同的参数设置 一 创建application properties 使用 spring profiles acti
  • 7.14华为模拟面试

    你对MySQL的慢查询优化有了解吗 没有了解 https blog csdn net weixin 45764765 article details 124112232 约瑟夫环剩余问题 模拟 有特殊用例超时通过不了 class Solut
  • 灰度重采样的方法分为_数字图像灰度重采样

    图像重采样的依据是辛克 SINC 函数 但由于辛克函数是定义在无穷域上的 又包括三角函数的计算 实际使用不方便 因此人们采用了一些近似函数代替它 据此产生了三种常用的重采样方法 最邻近像元采样法 双线性内插法和双三次卷积重采样法 最邻近像元
  • Linux——管理容器服务

    一 自动启动容器 为rootless容器创建systemd用户单元文件 可以使用systemctl命令来管理它们 通过启用服务 可以确保关联容器在主机启动时启动 如果容器在rootless中运行 则可以从非特权用户帐户管理这些服务 以提高安
  • deny of sb sth_句式分析(deny, be denied us)

    As long as you have faith in your cause salvation will not be denied us 请问 1 这句话最后需要加to吗 2 deny sb sth这个结构里面谁是直接宾语 答 den
  • 测试用例设计方法---边界值分析法

    1 边界值分析法 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法 一般 我们在设计测试用例的时候 需要将等价类法和边界值法结合起来使用 1 1 边界范围节点 选取正好等于 刚好等于 刚好小于边界得值作为测试数据 上点 边界上
  • 区块链概念已足够庞杂,现当回归技术本身!

    如果把区块链放到人类社会里来看待的话 早期的区块链其实是一个百家争鸣的时代 我们都知道在春秋战国时期 百家争鸣造就了儒家 法家 墨家等诸多学术门派 最终归于秉持法家的秦国 区块链时代同样如此 之所以会出现如此多的区块链的概念 正是由于人们对
  • 删除分页符时,保持页面格式不乱

    删除分页符时 保持页面格式不乱 1 将光标移到在页面最后 回车 2 选中段落标记后面的 所有 内容 也可以用快捷键ctrl shift end delete 1 将光标移到在页面最后 回车 2 选中段落标记后面的所有内容 也可以用快捷键ct
  • PCIE结构拓扑(RC、EP、SWITCH)介绍

    1 PCIE典型结构拓扑 1 个人理解 红色方框部分一般是在芯片内部集成 对外可提供多个PCIE接口 2 芯片提供的PCIE接口 可以接EP设备 PCI桥 Switch设备 2 RC Root Complex 个人理解 RC在功能上和Swi
  • python 计算置信区间_python 计算数据中值的置信区间

    最近给导师报告处理WISE数据的进展时 对于处理WISE光变导师希望我对每一个观测区间的星等数值给中值的置信度 计算数据的中值95 的置信区间 假设有一组数据如下 data 0 1 2 4 0 1 0 7 1 4 0 9 3 2 0 2 0
  • ApacheBeam:大数据处理的一大神器!

    你知道被认为继MapReduce GFS BigQuery等之后 Google在大数据处理领域对开源社区的又一大贡献是哪个项目吗 答案是ApacheBeam 事实上 Beam 这个项目名称已经很清楚地表明了它的设计初衷 统一批处理 Batc
  • MySQL数据查询 - 联合查询

    联合查询 1 内连接查询 内连接查询 在实际开发中 我们会联合多个表来实现查询 比如把班级表和学生表联合起来就同时可以看到班级 老师和学员的信息 一个班级表 这种只有2张表匹配的行才能显示的连接方式在Mysql 中称之为内连接 INNER
  • 回文词(Uva 401)

    输入一个字符串 判断它是否为回文串以及镜像串 输入字符串保证不含数字0 所谓回文串 就是反转以后与原串相同 如abba和madam 所谓镜像串 就是左右镜像之后和原串相同 如2S和3AIAE 注意 并不是每个字符在镜像之后都能得到一个合法字