c语言一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:"aaa","bb",‘c’。输入字符串,请计算字符串的所有碎片及所有碎片的平均长度。 所有碎片的平均长度 = 所有碎片长度之和/碎片个数 输入 测试次数t 每组测试数据为一行字符串 输出 对每组测试数据,输出字符串中按顺序出现的碎片和所有碎片的平均长度(相同碎片只输出一次,平均长度保留2位小数
时间: 2024-02-20 15:56:43 浏览: 121
去掉重复的字符串及在第一个字符串中删除在第二个字符串中出现的字符
好的,我理解了你的问题。这个问题可以用C语言来解决。以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
int main() {
int t;
scanf("%d", &t);
while (t--) {
char str[1001];
scanf("%s", str);
int len = strlen(str);
int cnt = 0; // 碎片个数
double sum = 0.0; // 所有碎片的长度之和
for (int i = 0; i < len; ) {
int j = i + 1;
while (j < len && str[j] == str[i]) {
j++;
}
int frag_len = j - i;
printf("%c", str[i]);
cnt++;
sum += frag_len;
i = j;
}
printf(" %.2lf\n", sum / cnt); // 输出平均长度
}
return 0;
}
```
输入的第一个数表示测试数据组数。对于每一组数据,我们先读入一个字符串,然后遍历字符串,计算碎片个数和所有碎片长度之和,最后输出所有碎片和平均长度。需要注意的是,我们在计算碎片长度时,需要找到尽可能多的相同字母组成的碎片,因此需要使用一个内层循环来寻找,直到找到不同字母为止。
希望这个代码能够回答你的问题。如果你还有其他问题,可以继续问我。
阅读全文