用C语言做一组代码,H. 字符串碎片 题目描述 一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:"aaa","bb",‘c’。输入字符串,请计算字符串的所有碎片及所有碎片的平均长度。 所有碎片的平均长度 = 所有碎片长度之和/碎片个数 输入 测试次数t 每组测试数据为一行字符串 输出 对每组测试数据,输出字符串中按顺序出现的碎片和所有碎片的平均长度(相同碎片只输出一次,平均长度保留2位小数)。
时间: 2024-02-28 11:52:55 浏览: 62
c语言将字符串中的小写字母转换成大写字母
5星 · 资源好评率100%
以下是用 C 语言实现的代码,可以通过该题:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 1005
char s[MAXN];
int main() {
int t;
scanf("%d", &t);
while (t--) {
scanf("%s", s);
int len = strlen(s);
int cnt = 1;
double sum = 0;
printf("%c", s[0]);
for (int i = 1; i < len; i++) {
if (s[i] != s[i - 1]) {
printf("%c", s[i]);
sum += i;
cnt++;
}
}
sum += len;
printf(" %.2lf\n", sum / cnt);
}
return 0;
}
```
思路解析:
1. 读入测试数据的组数 $t$。
2. 对于每组测试数据,先读入字符串并计算字符串的长度 $len$。
3. 接着从头到尾扫描字符串,如果当前字符和前一个字符不相同,就输出当前字符,并且将当前字符所在的位置 $i$ 累加到变量 $sum$ 中,表示当前碎片的长度。
4. 最后将字符串的长度加到 $sum$ 中,计算平均长度并输出。
注意事项:
1. 字符串的长度可能达到 $1000$,所以要定义足够大的数组。
2. 输出平均长度时要保留 $2$ 位小数,且要注意输出格式。
3. 在本题中,只有小写字母,因此可以用字符来表示碎片,也可以用字符串表示碎片,但要注意处理相同碎片只输出一次的情况。
阅读全文