计蒜客详解合集(1)期

 以后对于简单题目,大致6道题目出一期,稍有难度的才单独一期发布~

目录

T1266——出勤记录

T1170——人民币支付 

T1122——最长最短单词 

T1115——字符串判等

T1116——验证子串 

T1118——删除单词后缀 


T1266——出勤记录

  • 小蒜的算法课老师每次上课都会统计小蒜的出勤记录。迟到会被记录一个L,缺席会被记录一个 A,按时上课会被记录一个0。学期结束,小蒜的出勤记录可以看成是一个只包含LAO 的字符串,例如"O0OOLOOOLALLO....."如果小蒜整学期缺席不超过 1 次,并且没有连续 3 次迟到,小蒜的出勤记录就算合格。现在给出小蒜的出勤记录,你能判断他是否合格么?输入格式
  • 输入第一行包含一个整数 T(1 < =T<=10),代表测试数据的组数以下工行每行一个程度不超过 100 的字符串 S,代表小蒜的出勤记录输出格式
  • 对于每一份出勤记录,输出“YES”或者“NO”表示该份记录是否合格.

水题,唯一考验操作水平的只有同级连续字符串最大值这一操作,解决方式如下: 

int late=-1; //连续缺勤的次数 
		int max=0;//最长连续的L 
		//缺勤检验 
		for(int k=0;k<=temp.size()-1;k++)
		{
			if(temp[k]=='L'&&late==-1)
			{
				late=1;//当前是连续的第一个迟到记录 
			}
			else if(temp[k]=='L'&&late!=-1) 
			{
				//不为-1意味着当前不是第一个连续的迟到记录,所以直接加一就好
				late++; 
			}
			else if(temp[k]!='L')
			{
				//如果不为k,则直接清零重新计数
				if(late>max)
					max=late;
				late=-1; 
			}
		}
		L.push_back(max);

全文代码:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main(int argc, char** argv) {
	
	int num=0;
	cin>>num;
	
	vector<int> V;
	vector<int> L;
	 
	for(int i=1;i<=num;i++)
	{
		string temp;
		cin>>temp;
		
		int count=0;// 缺勤次数 
		
		//缺勤检验
		for(int j=0;j<=temp.size()-1;j++)
		{
			if(temp[j]=='A')
				count++; 		
		}
		V.push_back(count);
		
		int late=-1; //连续缺勤的次数 
		int max=0;//最长连续的L 
		//缺勤检验 
		for(int k=0;k<=temp.size()-1;k++)
		{
			if(temp[k]=='L'&&late==-1)
			{
				late=1;//当前是连续的第一个迟到记录 
			}
			else if(temp[k]=='L'&&late!=-1) 
			{
				//不为-1意味着当前不是第一个连续的迟到记录,所以直接加一就好
				late++; 
			}
			else if(temp[k]!='L')
			{
				//如果不为k,则直接清零重新计数
				if(late>max)
					max=late;
				late=-1; 
			}
		}
		L.push_back(max);
	}
	
	for(int i=0;i<=num-1;i++)
	{
		if(V[i]<=1&&L[i]<3)
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	
	return 0;
}

T1170——人民币支付 

  • 蒜头君指定一金额(以元为单位,如 345),想次道文付该金额的各种面源的人民币量,显示 100 元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的钞票
  • 输入格式:个小于 1000 的正整数
  • 输出格式:输出分行,每行显示一个整数,从上到下分别表示 100 元,50元,20 元,10元,5元,1元人民币的张数~

超级水,不解释,代码的处理方式减低了繁琐程度

#include <iostream>
using namespace std;

int main(int argc, char** argv) {
	
	int num=0;
	cin>>num;
	
	int money[6]={100,50,20,10,5,1};

	for(int i=0;i<=5;i++)
	{
		int count=0;
		count=num/money[i];
		num-=money[i]*count;
		cout<<count<<endl;
	}
	
	return 0;
}

T1122——最长最短单词 

  • 输入1行句子(不多于 200 个单,每个单长度不超过 100),只包含字母和空格。单由至少一个连续的字母构成,空格和逗号都是单词间的间隔。试输出第 1 个最长的单词和第 1 个最短单词。
  • 输入格式:1行句子。
  • 输出格式:两行输出:第 1行,第一个最长的单词。第 2 行,第一个最短的单词.
  • 提示:如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词.

        又是一道水题,基本思路是从目标串中根据空格分离出来每一个单词,然后分别找出最大值与最小值,输出即可~

#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
int main(int argc, char** argv) {
	
	string S;
	vector<string> V;
	
	getline(cin,S);
	string temp;
	
	//分割单词 
	for(int i=0;i<=S.size()-1;i++)
	{
		temp+=S[i];
		if(S[i]==' '||i==S.size()-1)
		//最后一个单词要有单独的操作 
		{
			V.push_back(temp);
			temp.clear();
		}	
	}
	
	//删除除了最后一个单词以外,末尾的空格 
	for(int i=0;i<V.size()-1;i++)
	{
		string temp=V[i];
		temp.erase(temp.size()-1);
		V[i]=temp;
	}
	
//	cout<<endl;
//	for(int i=0;i<=V.size()-1;i++)
//	{
//		cout<<V[i].size()<<endl;
//	}
// 检验单词长度 
//	cout<<endl;
	
	int max=V[0].size(),maxt=0;
	int min=V[0].size(),mint=0;
	//两类辅助变量 
	 
	for(int i=0;i<=V.size()-1;i++)
	{
		//判断是否大于当前
		if(V[i].size()>max)
		{
			max=V[i].size();
			maxt=i;	
		} 
		//判断是否小于当前 
		if(V[i].size()<min)
		{
			min=V[i].size();
			mint=i;	
		}
	}
	cout<<V[maxt]<<endl;
	cout<<V[mint]<<endl;
	
	return 0;
}

T1115——字符串判等

  • 判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等.
  • 输入格式:两行,每行包含一个字符串;字符串长度不超过 100。
  • 输出格式:若两个字符串相等,输出“YES”否则输出“NO“ 

水题不解释,考研复习压力偶尔写一道换换心情还不错~

这里有一个比较有趣的知识点,对于同时输入多个字符串时还要允许空格的输入,那么普通的cin函数就不能满足要求了,这里采用getline函数解决,如下:

	string s1,s2;
	getline(cin,s1);
	getline(cin,s2);

剔除字符串中的空格

string DeBlack(string s)
{
	string n;
	for(int i=0;i<=s.size()-1;i++)
		if(s[i]!=' ')
			n+=s[i];
	return n;
}

统一字符为大写

string ConDX(string s)
{
	for(int i=0;i<=s.size()-1;i++)
		if(s[i]>=97&&s[i]<=122)
			s[i]=s[i]-32;
	return s;
}

判断字符串是否相等

int DoQua(string s1,string s2)
{
	if(s1.size()!=s2.size())
		return -1;
	for(int i=0;i<=s1.size()-1;i++)
	{
		if(s1[i]!=s2[i])
			return -1;
	}
	return 1;
}

如下是完整代码,使用前调试的结果正确

#include <iostream>
#include <string>

#include <vector> 
using namespace std;
 
string DeBlack(string s)
{
	string n;
	for(int i=0;i<=s.size()-1;i++)
		if(s[i]!=' ')
			n+=s[i];
	return n;
}

string ConDX(string s)
{
	for(int i=0;i<=s.size()-1;i++)
		if(s[i]>=97&&s[i]<=122)
			s[i]=s[i]-32;
	return s;
}
int DoQua(string s1,string s2)
{
	if(s1.size()!=s2.size())
		return -1;
	for(int i=0;i<=s1.size()-1;i++)
	{
		if(s1[i]!=s2[i])
			return -1;
	}
	return 1;
}


int main(int argc, char** argv) 
{
	
	string s1,s2;
	getline(cin,s1);
	getline(cin,s2);
	
	string n1=DeBlack(s1);
	n1=ConDX(n1);

	string n2=DeBlack(s2);
	n2=ConDX(n2);

    //	cout<<n1<<" & "<<n2<<endl;
		
	
	int ans=DoQua(n1,n2);
	if(ans==1)
		cout<<"YES"<<endl;
	else
		cout<<"NO"<<endl;
	return 0;
}

 

T1116——验证子串 

  • 输入两个字符串,验证其中一个串是否为另一个串的子串。
  • 输入格式:输入两个字符串,每个字符串占一行,长度不超过 200且不含空格~
  • 输出格式:若第一个串 S1 是第二个串 2 的子串,则输出"(s1) is substring of (s2)"否则,若第二个串 s2是第一个串s1的子串,输出(s2) is substring of (s1)“否则,输出“No substring"

        C++实现验证子串的功能:今天复习了一下数据结构的串部分的内容,突然想起来子串匹配的实现,于是计蒜客随便找一道题写一下,核心的代码为裁剪子串和字符串比较两个内容,建议理解+背诵,考研大概率会考。

子串裁剪

string Sfind(string s,int pos,int len)
{
	string temp;
	for(int i=pos;i<len+pos;i++)
	{
		temp+=s[i];
	}
	return temp;
}

如上,传入3个参数:目标字符串,开始裁剪的位置下标,以及裁剪字符的个数,最后返回值为裁剪好的字符串子串。

子串比较

int Scmp(string sa,string sb)
{
	int ans=0;
	for(int i=0;i<=sa.length()-1;i++)
	{
		if(sa[i]!=sb[i])
		{
			ans=sa[i]-sb[i];
			return ans;
		}
	}
	ans=sa.length()-sb.length();
	return ans;
}

如上,将需要比较的两个字符串传入,定义返回值为整型,当返回值为0时,字符串相等,而返回正值则代表前者大,负值则说明后者大;如果匹配的字符完全相等但长度不同,则认为长的字符串更大一些。 

完整代码如下:

#include <iostream>
#include <vector>
#include <string>
using namespace std; 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
string Sfind(string s,int pos,int len)
{
	string temp;
	for(int i=pos;i<len+pos;i++)
	{
		temp+=s[i];
	}
	return temp;
}
int Scmp(string sa,string sb)
{
	int ans=0;
	for(int i=0;i<=sa.length()-1;i++)
	{
		if(sa[i]!=sb[i])
		{
			ans=sa[i]-sb[i];
			return ans;
		}
	}
	ans=sa.length()-sb.length();
	return ans;
}
int main(int argc, char** argv) 
{
	string s1,s2;
	cin>>s1;
	cin>>s2;
	if(s1.length()>=s2.length())
	{
		int f1=0;
		for(int i=0;i<=s1.size()-1;i++)
		{
			
			string temp=Sfind(s1,i,s2.length());
			if(Scmp(s2,temp)==0)
			{
				cout<<s2<<" is substring of "<<s1<<endl;
				f1=1;
				break;
			}
				 	 		
		}
		if(f1==0)
			cout<<"No substring"<<endl;
	}
	else if(s1.length()<s2.length())
	{
		int f1=0;
		for(int i=0;i<=s2.size()-1;i++)
		{
			
			string temp=Sfind(s2,i,s1.length());
			if(Scmp(s1,temp)==0)
			{
				cout<<s1<<" is substring of "<<s2<<endl;
				f1=1;
				break;
			}		 	 		
		}
		if(f1==0)
			cout<<"No substring"<<endl;
	} 
	return 0;
}


T1118——删除单词后缀 

  • 给定一个单词,如果该单词以 er 、1y 或者 ing 后缀结尾,则删除该后(题目保证删除后缀后的单词长度不为 0),否则不进行任何操作。
  • 输入格式:输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为 32) 。
  • 输出格式:输出按照题目要求处理后的单词。 

        也是水题,考察对基本功的运用程度。此处采用三个独立的if语句,来分别判断是否删除相应的后缀。局限性在于使用了goto语句——一般情况下不建议这么做。此处改为whlie循环嵌套3个if语句用break输出也可以,大家自行尝试,不再一一赘述。

#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
int main(int argc, char** argv) {

	string S;
	cin>>S;
	int n=S.length();
	vector<char> V;
	for(int i=0;i<=n-1;i++)
	{
		V.push_back(S[i]);
	}
	//转换为vector是方便删除元素,看个人喜好 

	//去除ing后缀
	if(V[n-3]=='i'&&V[n-2]=='n'&&V[n-1]=='g')
	{
		for(int j=1;j<=3;j++)
			V.pop_back();	
		goto shuchu;
	} 
	//去除re后缀
	if(V[n-2]=='e'&&V[n-1]=='r')
	{
		for(int j=1;j<=2;j++)
			V.pop_back();
		goto shuchu;
	}  
		//去除ly后缀
	if(V[n-2]=='l'&&V[n-1]=='y')
	{
		for(int j=1;j<=2;j++)
			V.pop_back();
		goto shuchu;
	}  
	//删除一个后缀就要输出!因此采用goto语句 
	shuchu:
		for(vector<char>::iterator it=V.begin();it!=V.end();it++)
			cout<<(*it);
		
	return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

向量的范数、矩阵的范数

向量的范数 p-范数 常用的0-范数、1-范数、2-范数、无穷-范数其实都是p-范数的特殊情形。 0-范数 当p0时&#xff0c;表示0-范数。它比较特殊&#xff0c;本质是一种计数&#xff0c;表示向量中非0元素的个数。 1-范数&#xff08;也称L1范数&#xff09; 当p1时&#xff…

软件开发项目文档系列之十五如何撰写项目结项报告

这是一个项目总结文档的说明文件&#xff0c;它提供了项目的概述、建设情况、技术情况、测试情况、培训情况、试运行情况、主要成效等详细信息。 1 项目概述 项目名称&#xff1a;明确指定了项目的名称&#xff0c;这有助于确保文件的清晰性和易读性。 项目相关单位&#xff…

读写锁ReentrantReadWriteLock

读写锁ReentrantReadWriteLock是JDK1.5提供的一个工具锁&#xff0c;适用于读多写少的场景&#xff0c;将读写分离&#xff0c;从而提高并发性。读写锁允许的情况&#xff1a;一个资源可以被多个读操作访问&#xff0c;或者被一个写操作访问&#xff0c;但两者不能同时进行。 R…

【广州华锐互动】VR安防网络综合布线仿真实训打造沉浸式的教学体验

随着科技的快速发展&#xff0c;综合布线技术在建筑、数据中心、网络基础设施等领域的应用越来越广泛。为了适应这一趋势&#xff0c;传统的教学方法已经无法满足现代教育的需求。因此&#xff0c;采用创新的教学手段&#xff0c;如虚拟现实&#xff08;VR&#xff09;技术&…

【Python 千题 —— 基础篇】菜品的价格

题目描述 题目描述 食堂今天准备了很多好吃的菜。“beef” 12 元一份&#xff1b;“rice” 1 元一份&#xff1b;“fish” 8 元一份&#xff1b;其它菜品 5 元一份。请你根据输入的字符串&#xff0c;使用 if-elif-else 语句判断该菜品需要花费多少钱。 输入描述 输入一个菜…

【被面试官吊打系列】啥,你没说面试要考智力题呀 (上) ?

你好&#xff0c;我是安然无虞。 文章目录 1. 二进制问题分金条问题毒药问题 2. 先手必胜问题轮流拿石子抢30的必胜策略Nim游戏 3. 水桶问题5L和6L的水桶怎么量出3L的水&#xff1f;3L和5L的水桶怎么量出4L的水&#xff1f;一个装了10L水的桶&#xff0c;一个7L的空桶还有一个…

Windows搭建minio存储

minio功能类似以ftp 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.下载软件 https://dl.min.io/server/minio/release/windows-amd64/minio.exe 2.部署配置 我是在D盘下创建了minio目录 minio.exe是软件minio.log是日志&#xff08;不用创建&#xff09;minio900…

借钱正成为互联网一大坑,影响你的房贷,悄悄吞噬消费者

如今各个APP都可以给消费者提供贷款&#xff0c;由于网贷已坑了不少人&#xff0c;许多用户都选择了拒绝&#xff0c;不过APP的另一大坑却在悄悄影响消费者的征信&#xff0c;对消费者包括房贷在内的贷款产生影响。 互联网的这个坑就是先用后付功能&#xff0c;表面上各个APP以…

Node.js中的文件系统(file system)模块

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

GPT-4 Turbo 发布 | 大模型训练的新时代:超算互联网的调度与调优

★OpenAI&#xff1b;ChatGPT;Sam Altman&#xff1b;Assistance API&#xff1b;GPT4 Turbo&#xff1b;DALL-E 3&#xff1b;多模态交互&#xff1b;算力调度&#xff1b;算力调优&#xff1b;大模型训练&#xff1b;GH200&#xff1b;snowflake&#xff1b;AGI&#xff1b;A…

内存条选购注意事项(电脑,笔记本)

电脑内存条的作用、选购技巧以及注意事项详解 - 郝光明的个人空间 - OSCHINA - 中文开源技术交流社区 现在的电脑直接和内存条联系 电脑上的所有输入和输出都只能依靠内存条 现在买双条而不是单条 买两个相同的内存条最好 笔记本先分清是低电压还是标准电压&#xff0c;DD…

java多线程文件下载器

文章目录 1.简介2.文件下载的核心3.文件下载器的基础代码3.1 HttpURLConnection3.2 用户标识 4.下载信息4.1 计划任务4.2 ScheduledExecutorService&#x1f340; schedule方法&#x1f340; scheduleAtFixedRate方法&#x1f340; scheduleWithFixedDelay方法 5.线程池简介5.1…

“隐身术”成现实,中科院院士现场表演

&#xff08;图源&#xff1a;哔哩哔哩&#xff09; 在“bilibili超级科学晚”活动现场&#xff0c;中国科学院院士褚君浩为我们揭示了“隐身术”的原理。原来&#xff0c;这种神奇的技能是一种科学手段。 褚君浩院士为大家介绍了一种名为“柱镜光栅”的特殊材料&#xff0c;柱…

Zotero拓展功能之Zotero Style

Zotero Style拓展功能 一、列&#xff1a; 1.简介 首先你必须知道Zotero的基本功能&#xff1a;右键任意一个列的名字&#xff0c;会弹出一个右键菜单&#xff0c;你可以勾选/取消勾选一个列&#xff0c;并且在最后有两个按钮&#xff0c;一个是“列设置”&#xff0c;一个是…

VS2015模块库交接出现环境报错 error MSB8031 和 error C1189

问题报错 1.错误 MSB8031 Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. 错误 MSB8031不赞成为非Unicode字符集生成MFC项目。您必须将项目属性更改为Unicode&…

数据公网传输加密隧道技术

参考&#xff1a; https://wenku.baidu.com/view/c2bfb9b4d6bbfd0a79563c1ec5da50e2524dd1a1.html?wkts1699578126402

【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接

【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接 目录 【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接深入理解用户缓冲区缓冲区刷新问题缓冲区存在的意义 File模拟实现C语言中文件标准库 文件系统认识磁盘对目录的理解 软硬链接软硬链接的删除文件的三个时间 作者…

【Excel】函数sumif范围中符合指定条件的值求和

SUMIF函数是Excel常用函数。使用 SUMIF 函数可以对报表范围中符合指定条件的值求和。 Excel中sumif函数的用法是根据指定条件对若干单元格、区域或引用求和。 sumif函数语法是&#xff1a;SUMIF(range&#xff0c;criteria&#xff0c;sum_range) sumif函数的参数如下&#xff…

安徽首届道医传承十八绝技发布会在合肥成功举办

近日&#xff0c;在安徽合肥举行了首届道医传承十八绝技发布会&#xff0c;本次会议由安徽渡罗门生物科技有限公司、北京道武易医文化传播有限公司、楼观台道医文化研究院联合举办。现场吸引了来自全国各地民族医学领域的专家学者参与讨论与交流。本次会议旨在促进道医的交流与…

OCR技术狂潮:揭秘最新发展现状,引爆未来智能时代

OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术自20世纪以来经历了长足的发展&#xff0c;随着计算机视觉、人工智能和深度学习等领域的进步&#xff0c;OCR技术在准确性、速度和适用范围上都取得了显著的进展。以下是OCR技术发展的现…
最新文章