【C/PTA】数组进阶练习(二)

news/2024/11/15 2:25:20/

本文结合PTA专项练习带领读者掌握数组,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。

目录

    • 7-1 字符串逆序
    • 7-2 字符串替换
    • 7-3 统计字符出现次数
    • 7-4 IP地址转换
    • 7-1 删除重复字符
    • 7-2 说反话-加强版
    • 7-3 数组-回文串
    • 7-4 数组-无聊的菇菇一族
    • 7-5 数组-文本加密
    • 7-6 数组-动车上

7-1 字符串逆序

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:

输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:

在一行中输出逆序后的字符串。
输入样例:

Hello World!

输出样例:

!dlroW olleH

方法一:数组实现

#include <stdio.h>
int main()
{char c,a[80];int i=0;while((c=getchar())!='\n'){a[i]=c;i++;}for(int j=i-1;j>=0;j--){printf("%c",a[j]);}
}

方法二:引入gets及strlen

#include <stdio.h>
#include <string.h>
int main()
{char a[80];gets(a);for(int i=strlen(a)-1;i>=0;i--)printf("%c",a[i]);}

7-2 字符串替换

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母 	对应字母
A 	Z
B 	Y
C 	X
D 	W
… 	…
X 	C
Y 	B
Z 	A

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:

输出在一行中给出替换完成后的字符串。
输入样例:

Only the 11 CAPItaL LeTtERS are replaced.

输出样例:

Lnly the 11 XZKRtaO OeGtVIH are replaced.

#include <stdio.h>
int main()
{char c,a[80],b[80];int i=0;while((c=getchar())!='\n'){a[i]=c;i++;}for(int j=0;j<=i-1;j++){if(a[j]>='A'&&a[j]<='Z'){b[j]='A'+'Z'-a[j];}else b[j]=a[j];printf("%c",b[j]);}
}

7-3 统计字符出现次数

本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。
输入格式:

输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:

在一行中输出给定字符在给定字符串中出现的次数。
输入样例:

programming is More fun!
m

输出样例:

2

方法一:数组实现

#include <stdio.h>
int main()
{char a[80],c,d;int i=0,count=0;while((c=getchar())!='\n'){a[i]=c;i++;}d=getchar();for(int j=i-1;j>=0;j--){if(d==a[j])count++;}printf("%d",count);
}

方法二:引入gets及strlen

#include <stdio.h>
#include <string.h>
int main()
{char a[80],c;int count=0;gets(a);c=getchar();for(int i=0;i<strlen(a);i++){if(a[i]==c){count++;}}printf("%d",count);
}

7-4 IP地址转换

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
输入格式:

输入在一行中给出32位二进制字符串。
输出格式:

在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:

11001100100101000001010101110010

输出样例:

204.148.21.114

#include <stdio.h>
#include <math.h>
int main()
{char a[33];int t=7;//当前处理的二进制位在8位中的位置int sum=0;//当前部分的十进制结果gets(a);for(int i=0;i<32;i++){a[i]=a[i]-48;//将字符型的'0'~'1'转换成对应的整型数0~1sum+=a[i]*pow(2,t);if(t==0)//如果是8位中的最后一位{printf("%d",sum);t=7;sum=0;if(i!=31)printf(".");}elset--;}
}

7-1 删除重复字符

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:

输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:

输出去重排序后的结果字符串。
输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

#include <stdio.h>
#include <string.h>
int main()
{char a[80];gets(a);for(int i=0;i<strlen(a)-1;i++){for(int j=0;j<strlen(a)-1;j++){if(a[j]>a[j+1]){char t=a[j];a[j]=a[j+1];a[j+1]=t;}}}//冒泡排序得到abccc//如果前后不一致就打印出来 所以得到abcfor(int i=0;i<strlen(a);i++){if(a[i]!=a[i+1])printf("%c",a[i]);}}

7-2 说反话-加强版

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

#include<stdio.h>
#include<string.h>
int main()
{char a[500001],b[500001];gets(a);  // 输入字符串int i,c,j;int count=0;for(i=0;a[i]==' ';i++)  // 计算开头的连续空格数{count++;}for(i=strlen(a)-1;i>=0;){if(a[i]!=' '){c=0;b[0]='\0';while(a[i]!=' '&&i>=0)  // 提取单词{b[c++]=a[i--];}//类似于把come中e、m、o、c分别放入b数组//此时b数组为emoc,将其逆序输出即可for(j=c-1;j>=0;j--)  // 逆序输出单词{printf("%c",b[j]);}if(count==i+1) ;  // 如果开头有空格则不输出else printf(" ");  // 输出单词之间的空格}else i--;}
}

7-3 数组-回文串

回文串是正着读和反着读都一样的字符串,例如“level”“noon”这些都是回文串,
现在希望你能找出输入的所有字符串中的回文串。
输入格式:

第一行为一个正整数N(0 < N <= 1000),表示有N个字符串,

接下来N行每行都是一个字符串(每个字符串长度不超过1000)。
输出格式:

输出所有是回文串的字符串,每输出一个字符串输出一个回车,包括最后一个字符串。

输入样例1:
3
abcabc
AbbbbA
cccc

输出样例1:
AbbbbA
cccc

#include <stdio.h>
#include <string.h>
int main()
{int n;scanf("%d",&n);getchar();//读取数字到字符串的换行符 避免回车的影响for(int i=0;i<n;i++){char a[1001];gets(a);int len=strlen(a);if(a[len-1]=='\n')//将字符串到字符串的换行符去掉{a[len-1]='\0';len--;}int flag=0;for(int i=0;i<len/2;i++){if(a[i]!=a[len-i-1]){flag=1;break;}}if(flag==0)printf("%s\n",a);}
}

7-4 数组-无聊的菇菇一族

戈壁上只居住着菇菇一族们,于是菇菇们实在太无聊了,除了吃饭,睡觉,菇菇们天天都无所事事。于是菇菇们想出了一个方法来消磨时间。菇菇们分成几组,每组按一定顺序排列,按从最后一个到第一个的顺序报出菇菇们的名字。报错的一组菇菇将要接受打理节操田地一周的惩罚(太可怕了>.<)。你能帮帮他们么?
输入格式:

第一行包括一个正整数N,表示有N组菇菇。

接下来N行每行包含一个字符串(长度小于100,仅包含小写字母),每个字母表示一个菇菇的名字。
输出格式:

输出N行,每行为该组菇菇报名字的顺序。
输入样例:

2
abcd
sama

输出样例:

dcba
amas

#include <stdio.h>
#include <string.h>
int main()
{int n;scanf("%d",&n);getchar();for(int i=1;i<=n;i++){char a[100];gets(a);for(int i=strlen(a)-1;i>=0;i--){printf("%c",a[i]);}printf("\n");}
}

7-5 数组-文本加密

某特工提供了一段文本,按照以下规则对逐个字符进行加密(称为密文):首先将大小写进行切换(大写转换成小写、小写转换成大写),之后再将字母替换成字母表中两位之前的字母,如‘c’替换成‘a’,‘b’替换成‘z’,‘A’替换成‘Y’。同时,该特工也提供了该密文的解析,请判断该解析是否正确。
输入格式:

输入仅一行,包含两个字符串,中间以一个逗号“,”隔开。每个字符串的长度分别不超过10000个字符,仅包含26个字母(含大小写字母‘a’-‘z’和大写字母‘A’-‘Z’),且保证两个字符的长度相等。
输出格式:

判断密文解析是否正确,正确则输出“Yes”,错误则输出“No”。
输入样例:

ccAAbB,AAyyZz

输出样例:

Yes

#include <stdio.h>
#include <string.h>
#include <ctype.h>int main()
{char a[10001], b[10001], c[10001];scanf("%[^,],%s",a,b);int len=strlen(a);for (int i=0;i<len;i++) {// 切换大小写if (isupper(a[i])) c[i]=tolower(a[i]);elsec[i]=toupper(a[i]);// 字母替换if(isalpha(a[i]))if(c[i]=='A'||c[i]=='B'||c[i]=='a'||c[i]=='b')c[i]=c[i]+24;else if((c[i]>='C'&&c[i]<='Z')||(c[i]>='c'&&c[i]<='z'))c[i]=c[i]-2;}c[len] = '\0';if(strcmp(b,c)==0) {printf("Yes");}else {printf("No");}
}

7-6 数组-动车上

就这样,阿翔和阿花分手了,阿翔独自一人登上了开往福大的动车……

阿翔刚在自己的座位上坐下,便听到一声问候:“同学,你好。”阿翔扭过头一看,见身旁是一美女,内心暗喜,吞吞吐吐地说:“你……你好……请问有什么事么?”女生说:“能不能麻烦你和我的朋友换个位置?”阿翔一愣,顺着她所指方向望去,见一帅哥。阿翔强装笑颜,答道:“好的。”

阿翔坐在帅哥的座位上,耳边萦绕着那对情侣的欢声笑语。他默默地从书包里掏出那叠英语卷。这一次,为了证明自己的帅气,阿翔要更华丽地调教这些考卷——

对于一个字符串S,设其第i个字符为Si,将每k个连续字符划分为一组,则{S0,S1,…,S(k-1)}为第0组,{Sk,S(k+1),…,S(2k-1)}为第1组,以此类推。阿翔要做的就是将第i组(i从0开始)字符逆置i次(逆置即倒序,如将abc置为cba)。若字符串剩下的字符不够凑成一组,则不对这些字符进行操作。

输入格式:
第一行为一个正整数k(大小不限,可能超过字符串长度);
第二行为一个字符串(长度不超过100,不含空格)。

输出格式:
输出仅一行,即完成操作后所得的字符串。

输入样例:
5
qwertyuiopasdfghjkl

输出样例:
在这里给出相应的输出。例如:
qwertpoiuyasdfghjkl

#include <stdio.h>
#include <string.h>
int main()
{int k;scanf("%d",&k);char a[101];scanf("%s",a);int len=strlen(a);if(k>len){//整个字符串向右逆置k%len个单位int t=k%len;char c[101];for(int i=0;i<len-t;i++){c[i+t]=a[i];//将不需要变化方向的元素进行逆置储存到c数组}int j=0;char b[101];	for(int i=len-t;i<len;i++){b[j]=a[i];j++;//将需要变化方向的元素储存到b数组}for(int i=0;i<=j-1;i++){printf("%c",b[i]);//输出}for(int i=t;i<len;i++){printf("%c",c[i]);//输出}}if(k==len){//不进行逆置printf("%s",a);}if(k<len){//进行分组int groupcount=len/k;//有len/k组int q=k;//k会变化,所以固定有q组//对每一组进行处理for(int j=1;j<=q;j++){char d[101];int n=0,m=k;//对a[0]~a[k-1-1]向右逆置一个单位//对a[k]~a[2k-1-2]向右逆置两个单位//对a[2k]~a[3k-1-2]向右逆置三个单位for(int t=n;t<=m-1-j;t++){d[t]=a[t];}//将不需要变化方向的元素储存到数组d//对a[k-1]逆置//对a[2k-1]、a[2k-2]逆置//对a[3k-1]、a[3k-2]、a[3k-3]逆置char e[101];for(int t=m-j;t<m;t++){e[t]=a[t];//将需要变化方向的元素储存到数组e}for(int t=m-j;t<m;t++){printf("%c",e[t]);}for(int t=n;t<=m-1-j;t++){printf("%c",d[t]);}n+=k,m+=k;}//对剩余的元素直接输出int remain=len%k;if(remain>0){for(int i=groupcount*k;i<len;i++){printf("%c",a[i]);}}}	
}

http://www.ppmy.cn/news/1226261.html

相关文章

语义检索系统【全】:基于milvus语义检索系统指令全流程-快速部署版

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

3.3 Windows驱动开发:内核MDL读写进程内存

MDL内存读写是一种通过创建MDL结构体来实现跨进程内存读写的方式。在Windows操作系统中&#xff0c;每个进程都有自己独立的虚拟地址空间&#xff0c;不同进程之间的内存空间是隔离的。因此&#xff0c;要在一个进程中读取或写入另一个进程的内存数据&#xff0c;需要先将目标进…

Git配置代理:fatal: unable to access*** github Failure when receiving data from

~吐槽一下 github自从被微软收购以后&#xff0c;大多数情况没点科技上网都进不去了&#xff0c;还是怀念以前随时访问的时光。 我一直都是开着系统代理的&#xff0c;但是今天拉一个项目发现拉不下来了&#xff0c;报错&#xff1a; fatal: unable to access https://githu…

2.6 Windows驱动开发:使用IO与DPC定时器

本章将继续探索驱动开发中的基础部分&#xff0c;定时器在内核中同样很常用&#xff0c;在内核中定时器可以使用两种&#xff0c;即IO定时器&#xff0c;以及DPC定时器&#xff0c;一般来说IO定时器是DDK中提供的一种&#xff0c;该定时器可以为间隔为N秒做定时&#xff0c;但如…

shopee选品工具:Shopee选品工具—知虾精准选品与科学运营的利器

在如今竞争激烈的电商市场中&#xff0c;如何进行精准选品和科学运营成为了每个卖家都需要面对的问题。而Shopee选品工具——知虾&#xff0c;作为一款强大的大数据采集及分析平台&#xff0c;为卖家提供了全面的市场分析、产品分析和店铺分析功能&#xff0c;帮助卖家发现市场…

Elasticsearch基础增删改查

Elasticsearch是面向文档型数据库&#xff0c;一条数据在这里就是一个文档 倒排索引 正排(正向)索引&#xff1a; IDcontent01my name is zhangsan02my name is lisi 倒排索引&#xff1a; keywordIDname01,02zhang01 创建索引 创建索引等同于创建数据库 PUT具有幂等性&…

腾讯云轻量应用服务器使用场景列举说明

腾讯云轻量应用服务器&#xff08;TencentCloud Lighthouse&#xff09;是新一代开箱即用、面向轻量应用场景的云服务器产品&#xff0c;轻量应用服务器可用于搭建中小型网站、Web应用、博客、论坛、小程序/小游戏、电商、云盘/图床、云端开发测试和学习环境等轻量级、中低负载…

py字符串转字符串数组

在Python中&#xff0c;你可以使用列表&#xff08;list&#xff09;来存储多个字符串。如果你有一个字符串&#xff0c;并且想要将其转换为字符串数组&#xff0c;你可以使用列表推导式&#xff08;list comprehension&#xff09;。这是一个简单的例子&#xff1a; # 原始字…