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

浙大PTA拼题A读者验证码刷题页面、PTA免费刷题页面(不需要读者验证码) 有一个B站号@李桥桉,很多年前讲过PTA里的一些题目的解法。近两年有好多同学反馈,需要读者码才能进行答题,不然只能免费注册、看题、编写代码,就是不能提交代码(大受震撼)。咱就是说,会不会是同学们找错页面了,有免费的不需要读者码的题目集啊。先来说打开PTA平台,哪些题目集是需要输入读者码的,哪些是免费练习不需要读者码的。 阅读详情

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

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~1
		sum+=a[i]*pow(2,t);
		
		if(t==0)//如果是8位中的最后一位
		{
		printf("%d",sum);
		t=7;
		sum=0;
		if(i!=31)
		printf(".");
		}
		else
		t--;
	}
}

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
	
	
	//如果前后不一致就打印出来 所以得到abc
	for(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]);
		else
            c[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;char c[101];scanf("%d",&k);scanf("%s",c);
	int len=strlen(c);
	int a[101]={0};//用于记录字符是否被输出过
	int groupcount=len/k-1;//计算分组数量
	int j,i;
	
	for(j=0;j<=groupcount;j+=2)
	{
		//输出每组的前k个字符
		for(i=j*k;i<(j+1)*k;i++)
		{
			if(i>=len)
			break;
			printf("%c",c[i]);
			a[i]++;
		}
		

//逆序输出每组的后k个字符
	for(i=(j+2)*k-1;i>=(j+1)*k;i--)
	{
		if(i>=len)
		break;
		printf("%c",c[i]);
		a[i]++;
	}
}
	

	
	for(i=0;i<len;i++)
	{
		if(a[i]==0)
		printf("%c",c[i]);//输出没有被标记的字符
	}
}
【C语言】字符串逆序与三步翻转法(倒置字符串) 还有如果gets无法使用时gets_s使用的细节,gets_s会补\0在输入的字符串后,所以我们要注意输入的字符长度不要超过gets_s的参数的数字。我们知道strlen函数,可以求\0之前的字符个数,可以利用这一点来确定right指针的位置。所以我们让还在指向space的str2++,但是这个str2还是有条件,当到字符串最后的时候。我们直接用一个cur指针来接收str2-1的值,也就是指向space的前一个字符。str2肯定就会指向\0,所以我们也要加限制条件,不然就会越界访问,形成野指针。 阅读详情

相关推荐

【PTA选择/基础巩固/期末复习】C语言数组常见错误解析与实战避坑指南

本文详细解析了C语言数组在PTA编程题中的常见错误与避坑指南,包括数组定义初始化、越界访问、内存大小计算等核心问题。通过典型错误案例和正确示范,帮助读者掌握数组操作的关键技巧,提升编程效率和代码质量,特别适合C语言初学者和PTA备考者参考。

weixin_29210727的博客 682

PTA字符串逆序

'\n')//输入字符串。

2303_79781224的博客 3156

【WUT】PTA 2022春-MOOC-练习题

数组 | 函数和指针 | 选择结构 | 顺序结构 | 循环结构

linked的博客 5806

字符串-04. 字符串逆序(15)

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。 输入格式: 输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。 输出格式: 在一行中输出逆序后的字符串。 输入样例: Hello World! 输出样例: !dlroW olleH 程序:

rabbit8848的专栏 1万+

C语言-翁恺-PTA-41-80课后练习题-02

代码地址。

Huangpengyu123的博客 1729

浙大PTA练习7-3 将数组中的数逆序存放

` `本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。 输入格式: 输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。 输出格式: 在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。 输入样例: 4 10 8 1 2 输出样例: 2 1 8 10 #include <stdio.h> int main(void) { int n,i; scanf("%d",&n

weixin_52390207的博客 2218

【C | PTA】数组进阶练习(三)

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

等风来 9476

PTA 6-13 函数实现字符串逆序

PTA 6-13 函数实现字符串逆序

PTA-武汉理工大学C理论课学习及答案二

这是一篇whut学子写的关于自己学习c理论课的心得之谈。 PTA的答案及解析。

m0_51982410的博客 2万+

AntV G6边动画实战:手把手教你实现数据流向箭头与虚线流动效果

本文详细解析了如何使用AntV G6实现数据流向箭头与虚线流动效果,通过自定义边动画提升数据可视化的动态表现力。从基础环境搭建到核心概念讲解,再到虚线流动动画和箭头路径动画的具体实现与参数调控,帮助开发者掌握G6边动画的高级技巧,适用于网络流量监控、数据传递等场景。

weixin_28487433的博客 268

NumPy包(下) python笔记扩展

nditer 是 NumPy 中的一个强大的迭代器对象,用于高效地遍历多维数组。nditer 提供了多种选项和控制参数,使得数组的迭代更加灵活和高效。nditer 提供了多种控制参数,用于控制迭代的行为。1.order 参数order 参数用于指定数组的遍历顺序。默认情况下,nditer 按照 C 风格(行优先)遍历数组。# 创建一个二维数组​# 使用 C 风格遍历数组print(x)# 输出:# 1# 2# 3# 4# 5# 6​# 使用 Fortran 风格遍历数组。

正在学习中ing...... 1354

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

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

等风来 7834

STM32N6:MCU+NPU架构如何重塑边缘AI部署新范式

STM32N6作为业界首款MCU+NPU架构的通用微控制器,通过集成600 GOPS算力的NPU与800MHz Cortex-M55内核,实现了边缘AI部署的革命性突破。该方案在工业视觉和智能家居等场景中,以超低功耗和成本提供实时AI处理能力,性能较传统MCU提升超100倍,重塑了边缘智能设备的设计范式。

g8f9d0s1a2的博客 1292

【C/PTA】数组练习(编程)

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

等风来 1万+

elementui中el-select和el-tree实现下拉树形多选功能

elementui中el-select和el-tree实现下拉树形多选功能

weixin_49203377的博客 6557

5张图,搞懂三方支付机构的“备付金账户”体系

本文将详细解析第三方支付机构各类备付金账户的功能定位、所承载的支付业务处理流程以及日常管理。

银行信息系统应用架构详解 2148

【C | PTA】函数专项练习(二)

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

等风来 7924

数据分享|1961-2017年中国0.25°×0.25° 逐日地表水文数据集(VIC-CN05.1)

其中,全球径流中心(University of New Hampshire and Global Runoff Data Centre, UNH/GRDC)的复合产流场集成了观测的河道径流和水量平衡模式模拟的地表和地下径流,常被用来评估模拟的径流。在长白山、海北灌丛和千烟洲通量站,模拟与观测的逐月潜热通量的平均NSE为0.61。VIC-CN05.1受益于较准确的大气驱动场、先进的地表水文参数化方案以及更真实丰富的土壤信息,可作为中国水文气象研究的参照数据,用于陆面模式的评估和长期的趋势分析等。

J_Giser的博客 1834

【C | PTA】结构体专项练习

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

等风来 6995

《多模态融合改进》支持目标检测、目标分割、OBB、姿态估计,配置教程

本文以为例,讲解如何配置,支持替换专栏里所有的改进方式。

Limiiiing的博客 801

想在 Visual Studio Code 里进行 ABAP 开发,需要安装的扩展列表

安装完毕后,我们可以将 SAP 系统配置为 Visual Studio Code 连接的远程文件系统。为了连接到 SAP 系统,需要启用 ABAP 开发工具 (ADT) ICF 节点,这与 SAP Hana Studio 等工具使用的服务相同。打开 SAP GUI 并连接到目标系统,运行事务 SICF,然后激活 ADT_SRV 服务,如下所示。这启用了允许代码编辑器和 IDE 连接到 SAP 系统的服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3125

PTA练习7-4给定两个整型数组,本题要求找出不是两者共有的元素。

PTA练习7-4给定两个整型数组,本题要求找出不是两者共有的元素。输入样例输出样例我德代码通过测试 题目(C语言) 给定两个整型数组,本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。 输出格式: 在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。 输入样例 10 3 -5 2 8 0 3 5 -15 9 100 11 6

steadyfirmness的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PTA数组写题总结

注意:在使用strstr()函数时,b的长度一定是要比a小的。不然b咋是a的子串,那该反过来a是b子串了(doge)(注意数组一开始定义为[3][3]测试点过不了不知道为什么)稍微需要思考的地方就是新数组的赋值需要三个嵌套循环。以防N大于数组长度复制时越界,则略掉数组长度的倍数。然后判断第一个矩阵的列和第二个矩阵的行是否相等。那么题目的要求就是将每一行的第一个数据输出。主要思想就是将需要后移的字符存到数组1。Dev-c++返回值只有0,1,-1。接着打印停下来的字符包括后面的字符串。

JaneHan_的博客 1444

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PTA考前练习错题集

PTA错题集 1.对于已正确定义的二维数组a, *(a[i]+j)与a[i][j]的含义相同。 对 2.结构体成员的类型必须是基本数据类型。 错 3.设变量定义为 int a[2]={1,3}, p=&a[0]+1;,则p的值是( )。 3 4.在一个被调用函数中,关于 return 语句使用的描述,错误的是(D )。 被调用函数中可以不用 return 语句 被调用函数中可以使用多个 return 语句 被调用函数中,如果有返回值,就一定要有 return 语句 被调用函数中,一个 return

weixin_45921856的博客 3947

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PTA—C语言练习题

复习C练习题 1-1:Hello World! 要求:编写程序,输出一个短句“Hello World"。 #include<stdio.h> int main(void){ printf("Hello World!"); return 0; } 1-2:温度转换 要求:本题要求编写程序,计算华氏温度150°F对应的摄氏温度。计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。 输出格式:fahr = 150, celsius = 计算所

lcyiloveyou的博客 8544
上一篇: 【C/PTA】数组进阶练习(一)
下一篇: 【考研数学神作】你不能错过的学习教材
秋说
秋说 优质创作者: 编程框架、信息安全技术领域 优质创作者: 编程框架、信息安全技术领域
博客等级 码龄4年 3万+粉丝 1906原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值