BUPT OJ90 字符串转换

该博客介绍了一种计算将小写字母组成的字符串转换为简单串的最小代价的方法。简单串是由同一字母构成的字符串。转换规则是字母只能转换为其相邻的字母,代价为1,且a和z相邻。博客提供了示例并说明了如何计算转换字符串'abbbz'到简单串'bbbbb'的最小代价为3。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


题目描述

我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而"abcd"则不是简单串。现在给你一个仅由小写字母组成的字符串,你需要用最小的花费,将其转换成一个简单串。 花费的计算规则如下:将a到z这26个小写字母从左到右排成一排,则每个字母都有左右两个邻居,我们认为a的左邻居是z,z的右邻居是a。一个字母只能转换成其相邻的字母,转换的花费为1。一个字母可以进行多次转换,例如将a转换成d,可以进行如下的步骤: a->b->c->d,花费为3。字符串的转换花费为所有字母转换花费之和。例如将字符串"abbbz"转换成简单串的最小花费为3,转换后的结果为"bbbbb"。

处理二进制数的输入输出,尤其是在BUPT OJ机试中,需要特别注意格式的正确性和前导零的去除。为了帮助你更好地掌握这些技巧,推荐阅读《北邮机试历年试题解析与代码》。这份资源提供了历年北邮机试的题目解析和相应的代码实现,能为你提供直接的参考和学习。 参考资源链接:[北邮机试历年试题解析与代码](https://wenku.youkuaiyun.com/doc/6412b6c0be7fbd1778d47d9d?spm=1055.2569.3001.10343) 首先,当编写C语言程序处理二进制数时,输入通常是一个整数,你需要将其转换为二进制字符串转换过程中,要特别注意移除前导零。可以通过循环除以2并记录余数的方式构建二进制字符串,但要记得从最后一个非零余数开始输出。 其次,BUPT OJ对输出格式有严格的要求。通常,每个输出的二进制数后面不加分号,且与其他输出内容之间用空格分隔。示例如下: ```c #include <stdio.h> #include <string.h> // 函数用于移除字符串开头的零 void removeLeadingZeros(char *binaryString) { int len = strlen(binaryString); int writeIndex = 0; for (int i = 0; i < len; ++i) { if (binaryString[i] != '0') { break; } ++writeIndex; } // 将非零部分移到字符串开头 for (int i = writeIndex, j = 0; i < len; ++i, ++j) { binaryString[j] = binaryString[i]; } binaryString[j] = '\0'; // 添加字符串结束符 } int main() { unsigned int t, n; scanf( 参考资源链接:[北邮机试历年试题解析与代码](https://wenku.youkuaiyun.com/doc/6412b6c0be7fbd1778d47d9d?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值