C语言蓝桥杯-解码-创新互联
目录
创新互联公司从2013年开始,是专业互联网技术服务公司,拥有项目成都网站设计、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元如东做网站,已为上家服务,为如东各地企业和个人服务,联系电话:13518219792题目描述
输入、输出格式
输入、输出样式
说明/提示
做题思路
代码
解码题目描述
小明有一串很长的英文字母,可能包含大写和小写。
在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。 例如,连续的 5 个 a,即 aaaaa,小明可以简写成 a5(也可能简写成 a4a、aa3a 等)。
对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方便表达,小明不会将连续的超过9个相同的字符写成简写的形式。
现在给出简写后的字符串,请帮助小明还原成原来的串。
输入、输出格式
输入一行包含一个字符串。
输出格式输出一个字符串,表示还原后的串。
输入、输出样式
输入 #1
H3el5o2
输出 #1
HHHellllloo
说明/提示
对于所有评测用例,字符串由大小写英文字母和数字组成,长度不超过 100100。请注意原来的串长度可能超过 100100。
蓝桥杯 2020 第一轮省赛 A 组 F 题(B 组 G 题)。
5做题思路
5.1数据存放
本题目在输入格式中就提到"字符串",加上需要既输入字母又输入数字,所以得出我们需要使用一个字符型数组来存放字符串
在创建字符型数组的时候,发现说明,测试用例的字符串长度不超过100,而原字符串长度可能超过100,加上题目描述,小明不会将连续的超过9个相同的字符写成简写的形式。
这里,我们以最坏的情况来考虑,假设小明给了100个字符串长度,每个字母都是9,那么,真实字符串的大小可能是50*9,也就是450为数组的最小 大小。也就是如下代码
这样,我们就可以完美储存原字符串了。
值得注意的是,这道题目有两种储存数据的方法:一种是在原数组里储存、打印;另一种是将输入的字符串扩展成原字符串到另一个数组。这里我用的是第一个方法。
5.2 数据判断
仔细观察,发现输入样例有H3el5,所以在读取数据时需要讨论前后两个数据都是字母的情况
5.3主要思路
基本思路:有序数组在内存中是连续存放的
核心思路:数据是字母+数字在内存中连续存放,其中,数字为1会省略
这样,我们就可以使用两个指针来指向这个数组,一个指针指向字母,另一个指针指向数字,然后根据指向数字的指针得出循环次数,将字母循环打印即可,如果两个都是字母,则打印前一个指针的字母一次,然后++。
这里就是直观的图像
然后开始代码
由于我们scanf的输入格式是%s,所以输入的数字会被转化成字符数字,在循环时需要减去'0'才能得到对应的数字,打印完成后指针会指向后两个元素,进而继续判断
6.代码
#includeint main()
{
char arr[450] = { 0 };
scanf("%s", arr);
int situ = 0;
int news = 1;
while (arr[situ] != 0)
{
if (arr[news] >= '0' && arr[news]<= '9')
{
int tmp = arr[news] - '0';
while (tmp--)
{
printf("%c", arr[situ]);
}
situ += 2;
news += 2;
}
else//字母
{
printf("%c", arr[situ]);
situ += 1;
news += 1;
}
}
return 0;
}
ps:这是萌新的第一篇博客,希望大家喜欢,有什么需要改进的地方大家可以提出来,以后会不定期更新一些蓝桥杯的博客的
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享名称:C语言蓝桥杯-解码-创新互联
当前URL:http://azwzsj.com/article/hsids.html