C语言代码递归实现:洛谷P1928—外星密码

题解:洛谷 P1928 外星密码 经过很长时间的努力,小队终于收到了外星生命的回信。解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串 X 会压缩为 [DX] 的形式(),比如说字符串 CBCBCBCB 就压缩为 [4CB] 或者[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是 [2[2[2CB]]] 则是三重的。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。输入一行,一个字符串,表示外星人发送的密码。输出一行,一个字符串,表示解压缩后的结果。 阅读详情

我看到网上的题解部分都是C++,有C语言的题解也没法全AC,这道题自己写起来还是比较复杂的。

思路:

这是一道经典的递归题目,大致方法为没遇到一个左括号 ‘ [ ’ 就递归一次。整体难度还是不大的,就是要处理好一些细节方面的问题,并计算字符串的标记处。

(没听懂的可以去看看c++题解的文章,写的非常详细,这里仅是使用C语言写出的题解)

不啰嗦,直接上代码吧。

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

char arr[20001];//存放初始数组 
char end[20001];//存放答案 
int begin=0;//定义end的长度,用于存入操作 

void ikun(char arr[])
{
	int len=strlen(arr);
	
	int i,j;
	for(i=0;i<len;i++)
	{
		if(arr[i]!='[')//判断递归的条件 
		{
			end[begin]=arr[i];//正常情况直接粘贴到数组end中去 
			begin++;
		}
		else 
		{
			i++;//不正常情况把arr位置后移一格 
			int t=arr[i]-48;
			
			if(arr[i+1]<='9'&&arr[i+1]>='0')
			{
				t=t*10+arr[i+1]-48;//记录反复输出的次数到参数t 
				i++;
			}
			
			int mark_kuohao=1;//标记括号数目(奇数为不合格,偶数可以输出) 
			int mark_num=0;
			char num[20001];
			
			memset(num,0,sizeof num);//初始化num字符串 
			
			for(j=i+1;j<len;j++)
			{
				if(arr[j]=='[')mark_kuohao++;
				if(arr[j]==']')mark_kuohao--;// 计算括号是否配对 
				
				if(mark_kuohao==0)break;//直到到达其对应的右括号中退出
				
				num[mark_num]=arr[j];//复制括号内的所有字符串到num
				mark_num++;
			}
			
			int len_num=strlen(num);//计算num的长度用于计算递归后返回的位置 
			int k;
			
			for(k=0;k<t;k++)	
			{
				ikun(num);//递归:对应t次数的for循环 
			}
			//递归重括号内的字符串新处理 
			
			i+=len_num+1;
			//标记返还递归后的位置 
			
			memset(num,0,sizeof num);
			//初始化num数组	
		}
	}
	return;
}

int main()
{
    int i,j;
	scanf("%s",&arr);	
	ikun(arr);//主函数没什么好说的 
	printf("%s",end);
	return 0;
}

写了三天了,终于过了,太不容易了!

-____-"

唉~別提写代码的过程了.....(难绷啊)

思路仅供参考,不是最优解法

【Q1/论文复现】:利用 CHARLS 数据库考察抗高血压药物依从性和认知衰退 摘要: 北京大学团队基于CHARLS数据(2011-2018)的纵向研究发现,抗高血压药物高依从性能显著延缓中国45岁及以上社区中老年人的认知衰退。研究表明,坚持服药者7年内全局认知衰退速度降低0.014SD/年,记忆功能衰退减缓0.023SD/年,效果接近正常血压人群水平。研究还提示社会经济地位(SES)可能通过影响用药依从性间接调控认知衰老进程。该成果为高血压管理对认知保护提供了人群级证据,发表于《BMC Medicine》(DOI:10.1186/s12916-025-03949-8)。 阅读详情

相关推荐

Win11上WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文详细介绍了在Win11系统上安装和配置WSL2及Ubuntu22.04开发环境的完整流程与避坑指南。内容涵盖从解决网络安装错误、更换国内镜像源以加速软件更新,到一站式配置C++开发工具链(包括GCC、GDB、CMake等),并提供了提升WSL2使用体验的实用技巧和故障排除方法,帮助开发者高效搭建稳定的Linux开发环境。

weixin_29306261的博客 474

洛谷-【入门3】循环结构——C语言

洛谷-【入门3】循环结构——C语言

去无人的岛,摸鲨鱼的角 5193

CentOS 7下rsyslog日志服务器搭建全攻略:从安装到避坑

本文详细介绍了在CentOS 7系统上搭建rsyslog日志服务器的完整流程,从基础安装到高级配置,包括协议设置、日志模板设计、安全加固和性能优化。特别分享了生产环境中的实战技巧和常见问题解决方案,帮助用户高效构建可靠的日志管理系统。

happy2的博客 687

外星密码--C语言实现

外星密码 【题目】: 有了防护伞,并不能完全避免 2012 20122012 的灾难。地球防卫小队决定去求助外星种族的帮助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压 缩密码,外星人对于连续的若干个相同的子串 X 会压缩为 [DX] 的形式(D DD 是一个整数且 1 ≤ D ≤ 99 1\leq D\leq 991≤D≤99),比如说字符串 CBCBCBCB 就压缩为 [4CB] 或者 [2[2C

xxxbx的博客 989

从S参数到SPICE模型:Cadence Sigrity Boardband SPICE完整使用指南

本文详细介绍了Cadence Sigrity Boardband SPICE工具的核心价值与完整使用流程。该工具通过矢量拟合算法,将复杂的多端口S参数文件转化为无源、紧凑且高精度的SPICE等效电路模型,从而极大提升时域仿真效率。指南涵盖了从数据导入、关键参数配置、模型精度验证到集成应用于PowerSI等系统级仿真的全步骤,是信号与电源完整性分析的必备利器。

defi6farmer的博客 432

手把手教你设计T型和Π型衰减器:从理论计算到实际搭建(含误差分析)

本文详细介绍了T型和Π型衰减器的设计方法,从理论计算到实际搭建,包括电阻值推导、元件选择技巧及误差分析。通过实例演示如何设计50Ω系统中的10dB衰减器,并提供了高频应用和优化策略,帮助电子工程师掌握阻抗匹配与信号衰减的核心技术。

weixin_33737774的博客 395

洛谷P1928 外星密码

洛谷P1928 外星密码

wetqadsg的博客 652

《C/C++等级考试(1~8级)历届真题解析》专栏总目录

中国电子学会《全国青少年软件编程等级考试》C/C++编程(1~8级)历届真题解析。订阅后可阅读专栏内所有真题解析,真题持续更新中!

人生就是一个不断学习的过程 2万+

P1928 外星密码(递归)(栈)

思路 起初看到这题的时候,一脸懵逼不知道该怎么写,我是这么想的一来就把所有的数据都输入,但是然后就不知道怎么写了。 当我看到别人的思路才没明白,原来一个一个输入才是正确的。 1.先寻找左括号,然后输入次数,再把次数叠加(再次递归,因为继续输入的不是左括号,右括号,直接加上去就行了) 2.找到了右括号,则直接返回就行。 源码 #include<bits/stdc++.h> using namespace std; string fun(){ int n; string s="",s1; .

浮生未歇 648

如何正确的计算两个角度的角度差?

这一步是必要的,因为它确保了无论a相对于b是在逆时针方向还是顺时针方向,d2总是正确地反映出绕圆相反方向的角度差。这样,当函数进行最后的比较时,它能够准确地比较两个方向的旋转路径并选择最短的一个。

小秋 AI SLAM 入门实战教程 4135

回归预测 | MATLAB实现MPR多元多项式回归

回归预测 | MATLAB实现MPR多元多项式回归

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1645

【洛谷】P1035 [NOIP2002 普及组] 级数求和——c语言

已知:S_n= 1+\dfrac{1}{2}+\dfrac{1}{3}+…+\dfrac{1}{n}S n ​ =1+ 2 1 ​ + 3 1 ​ +…+ n 1 ​ 。显然对于任意一个整数 kk,当 nn 足够大的时候,S_n>kS n ​ >k。 现给出一个整数 kk,要求计算出一个最小的 nn,使得 S_n>kS n ​ >k。

weixin_62063623的博客 1133

基于Simulink的电机驱动逆变器仿真

本文完成了电机驱动逆变器的Simulink多层级仿真平台搭建,实现了:✅ 构建了从理想到器件级的逆变器模型体系✅ 实现了Si/SiC损耗精确计算与结温预测✅ 建模了母线寄生参数、死区效应、栅极驱动等关键非理想特性✅ 支持故障注入与保护策略验证✅ 集成了热管理、EMI、寿命预测与碳足迹评估。

amy_mhd的博客 86

【洛谷】 P1928 外星密码

【代码】【洛谷】 P1928 外星密码。

bettyyu_6666的专栏 201

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

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

洛谷 P1928 外星密码

解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串 X 会压缩为 [DX] 的形式(D 是一个整数且 1≤D≤99),比如说字符串 CBCBCBCB 就压缩为 [4CB] 或者[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是 [2[2[2CB]]] 则是三重的。3.在某一中括号结束后一定要注意之后还有没有同等级的字符或者新中括号,这一点相信是很多同学忽略的,包括题目其实也没有提到。1.中括号之间的等级处理,比如博主本人提供的样例,都涉及不同等级的中括号区分。

Lhn1246331285的博客 413

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

洛谷 P1928 外星密码 C++ 递归

题目描述 有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮 助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一 串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压 缩密码,外星人对于连续的若干个相同的子串“X”会压缩为“[DX]”的形式(D 是一个整 数且 1≤D≤99),比如说字符串“CBCBCBCB”就压缩为“[4CB]”或者“[2[2CB]]”,类 似于后面这种压缩之后再压缩的称为二重压缩。如果是“[2[2[2C

Prudento的博客 1034

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

外星密码(p1928)C++实现

我认为知道这个思路也不好完成这个代码的原因在于,当题目上给了一个完整的字符串,我们往往想着直接给一个string类型,但通过代码不难发现,他把读入的数据分了好多段读入,最后把需要的加入到字符串中,这种思想正是我们需要学习的。这道题其实第一个方法很好想,就是模拟,思路也不是很难,很考察思维的完整性和自洽性,鼠鼠写一半就写不下去了,然后看了看书,发现用模拟法的话这道题是真简单,先把第一种方法贴出来。

spiritualfood的博客 601

洛谷 P1928 外星密码 题解

洛谷 P1928 外星密码 题解

qq_43219379的博客 931

【洛谷刷题记录|P1928|C++】普通的递归

有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串X会压缩为[DX]的形式(D是一个整数且1≤D≤99),比如说字符串CBCBCBCB就压缩为[4CB]或者[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是则是三重的。

c121385458的博客 755

洛谷P1928 外星密码(字符串模拟 + 分治 or dfs)

2020.6.10 po一下解题报告证明我今天没偷懒。早上的闹钟+老爸的音乐让今天这起回笼觉引发的惨案格外壮烈,起来一看,艹,9点多了。然后赶紧起床锻炼,就来做题了。 这道题看见多重压缩我们很容易想到只需要将最内层的压缩字串解压,其余可以按照规则把字符串逐层解压递归就行。 这道题感觉有些膈应的地方是,虽然在一开始很容易就想到了子状态,但是却并不太好确定怎么将字符串正确地加起来。毕竟括号可以无限长,无限拓展,字符串地下标不好确定。后来看到有人说可以边读边做就恍然大雾了,这样连我手动模拟整数读入都省了。 代码

Stagflation的博客 645

洛谷:P2036 P2392 P1928 P1498

Perket 是一种流行的美食。为了做好 Perket,厨师必须谨慎选择食材,以在保持传统风味的同时尽可能获得最全面的味道。你有 n 种可支配的配料。对于每一种配料,我们知道它们各自的酸度 s 和苦度 b。当我们添加配料时,总的酸度为每一种配料的酸度总乘积;总的苦度为每一种配料的苦度的总和。众所周知,美食应该做到口感适中,所以我们希望选取配料,以使得酸度和苦度的绝对差最小。另外,我们必须添加至少一种配料,因为没有任何食物以水为配料的。

gsy的博客 326

【洛谷】P1928 外星密码

#include <iostream> #include <cstdio> #include <string> using namespace std; string dx(){ int d; char c; string s = "", tmp; while (cin >> c){ if (c == '['){ cin >> d; tmp = dx()

恒治学 362

洛谷-算法1-4递推与递归2

有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串 X 会压缩为 [DX] 的形式(D 是一个整数且 1≤D≤99),比如说字符串 CBCBCBCB 就压缩为 [4CB] 或者[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是 [2[2[2CB]]] 则是三重的。

2302_81657110的博客 558

洛谷题单 【算法1-4】递推与递归

洛谷题单自用整理 算法【1-4】递推与递归

Tracy_yi的博客 685

备战蓝桥杯,用JAVA刷洛谷算法题单:【算法1-4】递推与递归

备战蓝桥杯,用JAVA刷洛谷算法题单:【算法1-4】递推与递归

Miss_ReRia 583

洛谷《深入浅出基础篇》题解-2(C语言)

洛谷题单深入浅出基础篇,算法1-1至1-7部分

W________11的博客 202
下一篇: POJ: Monthly Expense(C语言题解)
香袋Plus
博客等级 码龄3年 11粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值