编程生活day6--回文子串、蛇形填充数组、笨小猴、单词排序

回文子串

题目描述

给定一个字符串,输出所有长度至少为2的回文子串。

回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。

输入

一个字符串,由字母或数字组成。长度500以内。

输出

输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。

样例输入

123321125775165561

样例输出

33
11
77
55
2332
2112
5775
6556
123321
165561

解题思路:

·看到题目的第一个反应是要写一个判断回文的函数

·题目的输出说,要从小的字符串输出,然后再从靠左的优先输出

·因为要形成回文字符串,所以最小长度为2,长度再逐渐增加,但是这样还不能满足题意

·再定义一个起点i,从0开始,如果与len相加等于字符串长度,则终止遍历

纯文字说,可能比较抽象,大家可以直接看代码

代码如下:

#include <iostream>
#include <vector>
#include <string>using namespace std;bool huiwen(const string& s, int l, int r) {//判断是否是回文while (l <= r) {if (s[l] != s[r]) return false;l++;r--;}return true;
}
void findAll(const string& s) {//寻找字符串中的所有子串int n = s.length();int len;for (int len = 2; len <= n; len++) {//为终点,从2开始for (int i = 0; i <= n - len; i++) {//为起点,终止条件为n-len防止越界if (huiwen(s, i, i + len - 1)) {cout << s.substr(i, len) << endl;//substr输出从i到len的字符串}}}
}
int main() {string str; cin >> str;findAll(str);return 0;
}

难点

·判断回文字符串的函数

·想不到如何使用两层循环进行遍历,并且定义他们的和终点

·substr函数的使用

总结

这算是一道有些上难度的题目了,第二个函数,如果大家有不明白的地方,可以代入准确数字进行演算,即可知道为什么这样写了,而且也很好推算出来。其实第二个函数可以继续优化,使用双指针法进行求解,可以提高运行速度


蛇形填充数组

题目描述:

用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。

蛇形填充方法为:

对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。

比如n=4时,方阵填充为如下形式:

1  2  6  7
3  5  8  13
4  9  12 14
10 11 15 16

输入

输入一个不大于10的正整数n,表示方阵的行数。

输出

输出该方阵,相邻两个元素之间用单个空格间隔。

样例输入

4

样例输出

1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16

解题思路

·这道题我们需要将数组分为两部分进行输出,上半部分以及下半部分

·定义一个flag进行判断数组是斜向上遍历(flag = 0),还是斜向下遍历(flag = 1)

·我们要找到斜向上输出的循环不变量,以及斜向下输出的循环不变量,通过画图观察可以知道

如图是上半部分输出图,可以观察得出,斜向上的数组中,列的起初值不变,斜向下的数组中,行的初始值不变

·再看下半部分

依旧与上半部一样的情况,只不过初始值进行了改变,但方法并未改变

代码如下:

#include <iostream>using namespace std;int main() {int i = 1, j = 1, x = 1, flag = 0, n; cin >> n;int a[20][20];for (int k = 1; k <= n; k++) {if (flag == 0) {//斜向上遍历i = k, j = 1;//斜向上初始位置,j不变while (i != 0) {//防止越界a[i][j] = x++;i--, j++;//斜向上遍历}flag = 1;//修改为斜向下遍历}else {//斜向上i = 1, j = k;//斜向下初始位置,i不变while (j != 0) {//防止越界a[i][j] = x++;i++, j--;//斜向下遍历}flag = 0;//修改为斜向上遍历}}for (int k = 2; k <= n; k++) {//与上半部分方法一致if (flag == 0) {i = n, j = k;while (j != n + 1) {a[i][j] = x++;i--, j++;}flag = 1;}else {i = k, j = n;while (i != n + 1) {a[i][j] = x++;i++, j--;}flag = 0;}}for (int i = 1; i <= n; i++) {//输出数组for (int j = 1; j <= n; j++) {cout << a[i][j] << " ";}cout << endl;}
}

难点

·盲目寻找数字规律,没有找图像规律

·不知道怎么定义边界

·没有找到循环过程中的循环不变量

总结

输出蛇形数组,还是一道比较经典二位数组的题目,比较考察逻辑思维能力,可能在做这题之前没有什么思路,或则思路比较乱,但是看了题目之后,思路就会比较清晰了,这是一道经典的基础题,同学们一定要掌握


笨小猴

题目描述

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入

只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。

输出

共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。

样例输入

样例 #1:
error样例 #2:
olympic

样例输出

样例 #1:
Lucky Word
2样例 #2:
No Answer
0

提示

单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。
单词olympic中出现最多的字母i出现了2次,出现次数最少的字母出现了1次,2-1=1,1不是质数。

解题思路

·有的同学可能会有思路,就是将每个字母存入数组中,再寻找最大值和最小值,这样确实可以书写出来,现在,我要教大家一种更简便的方法

·使用count()函数,可以直接将字符数组中的每个单词出现的次数直接统计出,就可以方便很多

·剩下的只需要写一个判断素数的函数了

代码如下

#include <iostream>
#include <algorithm>
#include <cmath>using namespace std;bool isprime(int n) {//判断素数,如果是使用C++的同学,一定要使用cmath这个头文件if (n <= 1) return false;for (int i = 2; i <= sqrt(n); i++) {if (n % i == 0) return false;}return true;
}
int MaxMin(string s) {//统计出现次数最多和最少的字母int maxn = 0, minn = 101;for (int i = 0; i < s.size(); i++) {int cnt = count(s.begin(), s.end(), s[i]);if (cnt > maxn)maxn = cnt;if (cnt < minn)minn = cnt;}return maxn - minn;
}
int main() {string s; cin >> s;int ans = MaxMin(s);if (isprime(ans)) {cout << "Lucky Word" << endl;cout << ans;}else {cout << "No Answer" << endl;cout << 0;}return 0;
}

易错点

·不会书写判断素数的函数

·对count函数使用的不熟练

总结

如果知道方法,那么这道题就是一个简单题,但是如果不知道方法,就会复杂一些,所有要多做题,多见识一些方法,这样才能更快的进行求解


单词排序

题目描述

输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)

输入

一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。

输出

按字典序输出这些单词,重复的单词只输出一次。

样例输入

She  wants  to go to Peking University to study  Chinese

样例输出

Chinese
Peking
She
University
go
study
to
wants

解题思路

·很多同学可能第一思路就是,创建字符数组,把每个数组存入,再求每个单词的头字母的ascii码值,以此进行排序,但是题目还有说要只输出一次,说实话,这么多条件在这,直接毁灭吧,下一题算了

·其实可以使用函数以及set进行求解,可以实现单词的比较,排序以及去重

·使用sstream对单词进行分割,再存入set中,因为set自动实现排序以及去重,再输出即可

代码如下

#include <iostream>
#include <set>
#include <sstream>
#include <string>using namespace std;int main() {string line; getline(cin, line);set<string> s;//定义集合string word;stringstream ss(line);//将字符串分割成单词,存在ss中while (ss >> word) {//读取单词s.insert(word);//将单个单词存入集合中}for (auto w : s) {cout << w << endl;//输出集合中的元素}
}

难点

·不知道使用sstream

·不知道set的使用,部分同学只知道set可以去重,而不知道可以排序

总结

本题也没有什么代码或者逻辑的难度,只是单纯的提供了一种解题方法,以及工具的使用方式

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

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

相关文章

【设计原则】CQRS

文章目录 概述组成与特点优缺点何时使用 CQRS 模式推荐阅读 概述 CQRS&#xff08;Command Query Responsibility Segregation&#xff09;是一种软件设计模式&#xff0c;其核心设计理念是将一个对象的数据访问&#xff08;查询&#xff09;和数据操作&#xff08;命令&#…

显示器and拓展坞PD底层协商

简介&#xff1a; PD显示器或者PD拓展坞方案中&#xff0c;连接显示设备的Type-C端口主要运行在DRP模式&#xff0c;在此模式下可以兼容Source&#xff08;显卡&#xff09;、Sink&#xff08;信号器&#xff09;、DRP&#xff08;手机、电脑&#xff09;模式的显示设备。 Sou…

探索设计模式的魅力:揭秘B/S模式在AI大模型时代的蜕变与进化

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#xff1a;探索设计模式的魅力&#xff1a;揭秘B/S…

ArcGIS Pro导出布局时去除在线地图水印

目录 一、背景 二、解决方法 一、背景 在ArcGIS Pro中经常会用到软件自带的在线地图&#xff0c;但是在导出布局时&#xff0c;图片右下方会自带地图的水印 二、解决方法 解决方法&#xff1a;添加动态文本--服务图层制作者名单&#xff0c;然后在布局中选定位置添加 在状…

【星计划★C语言】c语言初相识:探索编程之路

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;星计划★C语言、Linux实践室 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️第一个c语言程序二. ⛳️数据类型2.1 &#x1f514;数据单位2.2 &…

【ARM 嵌入式 C 常用数据结构系列 25 -- container_of 宏 使用介绍】

文章目录 container_of 宏container_of 宏的定义container_of 使用示例应用场景总结 container_of 宏 在Linux内核编程中&#xff0c;container_of宏是一个非常有用的工具&#xff0c;它允许开发者从指向结构体中某个成员的指针反向获得包含它的完整结构体的指针。这在实现基于…

Vol.34 Good Men Project:一个博客网站,每月90万访问量,通过付费订阅和广告变现

今天给大家分享的案例网站是&#xff1a;Good Men Project&#xff0c;这是一个专门针对男性成长的博客网站&#xff0c;内容包括人际关系、家庭、职业发展等话题。 它的网址是&#xff1a;The Good Men Project - The Conversation No One Else Is Having 流量情况 我们先看…

Linux :进程的程序替换

目录 一、什么是程序替换 1.1程序替换的原理 1.2更改为多进程版本 二、各种exe接口 2.2execlp ​编辑 2.2execv 2.3execle、execve、execvpe 一、什么是程序替换 1.1程序替换的原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往…

LongAdder 和 Striped64 基础学习

cs&#xff0c;表示 Cell 数组的引用&#xff1b;b&#xff0c;表示获取的 base 值&#xff0c;类似于 AtomicLong 中全局变量的 value 值&#xff0c;在没有竞争的情况下数据直接累加到 base 上&#xff0c;或者扩容时&#xff0c;也需要将数据写入到 base 上&#xff1b;v&am…

32-2 APP渗透 - 移动APP架构

前言 app渗透和web渗透最大的区别就是抓包不一样 一、客户端: 反编译: 静态分析的基础手段,将可执行文件转换回高级编程语言源代码的过程。可用于了解应用的内部实现细节,进行漏洞挖掘和算法分析等。调试: 排查软件错误的一种手段,用于分析应用内部原理和行为。篡改/重打…

Unity | Shader基础知识(第十一集:什么是Normal Map法线贴图)

目录 前言 一、图片是否有法线贴图的视觉区别 二、有视觉区别的原因 三、法线贴图的作用 四、信息是如何存进去的 五、自己写一个Shader用到法线贴图 六、注意事项 七、作者的话 前言 本小节会给大家解释&#xff0c;什么是法线贴图&#xff1f;为什么法线贴图会产生深…

GPT4不限制使用次数了!GPT5即将推出了!

今天登录到ChatGPT Plus账户&#xff0c;出现了如下提示&#xff1a; 已经没有了数量和时间限制的提示。 更改前&#xff1a;每 3 小时限制 40 次&#xff08;团队计划为 100 次&#xff09;&#xff1b;更改后&#xff1a;可能会应用使用限制。 GPT-4放开限制 身边订阅了Ch…

C++多线程:单例模式与共享数据安全(七)

1、单例设计模式 单例设计模式&#xff0c;使用的频率比较高&#xff0c;整个项目中某个特殊的类对象只能创建一个 并且该类只对外暴露一个public方法用来获得这个对象。 单例设计模式又分懒汉式和饿汉式&#xff0c;同时对于懒汉式在多线程并发的情况下存在线程安全问题 饿汉…

【原创】基于分位数回归的卷积长短期结合注意力机制的神经网络(CNN-QRLSTM-Attention)回归预测的MATLAB实现

基于分位数回归的卷积长短期结合注意力机制的神经网络&#xff08;CNN-QRLSTM-Attention&#xff09;是一种用于时间序列数据预测的深度学习模型。该模型结合了卷积神经网络&#xff08;CNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;和注意力机制&#xff08;A…

C语言实现通讯录(从0-1的项目)

一、前言 1、实现通讯录首先我们要了解并懂得如何通过C语言来完成有关顺序表的实现 2、需要了解的内容&#xff1a;如何使用顺序表结构实现增、删、改、查等操作 二、顺序表的认识和实现 1、什么是顺序表 最基础的数据结构就是数组。 顺序表则是线性表的一种&#xff0c;…

图片改大小尺寸怎么改?几个修改图片尺寸的方法

日常生活和工作中&#xff0c;图片的大小和尺寸对于我们的工作和生活都至关重要&#xff0c;因此我们经常需要调整图片的大小。我们都知道压缩图是一款功能强大的图片在线处理工具&#xff0c;那么用它怎么调整图片大小呢&#xff1f;下面就让我们一起来看一下具体的操作步骤。…

基于Spring Boot的在线考试系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

实时渲染 -- 材质(Materials)

一、自然界中的材质 首先了解下自然界中的材质 如上这幅图&#xff0c;不同的物体、场景、组合&#xff0c;会让我们看到不同的效果。 我们通常认为物体由其表面定义&#xff0c;表面是物体和其他物体或周围介质之间的边界面。但是物体内部的材质也会影响光照效果。我们目前只…

微服务(基础篇-008-es、kibana安装)

目录 05-初识ES-安装es_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p81&vd_source60a35a11f813c6dff0b76089e5e138cc 1.部署单点es 1.1.创建网络 1.2.加载镜像 1.3.运行 2.部署kibana 2.1.部署 2.2.DevTools 3.安装IK分词器 3.1.在线安装ik…

【IP组播】PIM-SM的RP、RPF校验

目录 一&#xff1a;PIM-SM的RP 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-SM和静态RP 4.配置动态RP 5.配置Anycast RP 二&#xff1a; RPF校验 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-DM 4.RPF校…