题目原文
题目描述
一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:“aaa”,“bb”,‘c’。输入字符串,请计算字符串的所有碎片及所有碎片的平均长度。
所有碎片的平均长度 = 所有碎片长度之和/碎片个数
输入
测试次数t
每组测试数据为一行字符串
输出
对每组测试数据,输出字符串中按顺序出现的碎片和所有碎片的平均长度(相同碎片只输出一次,平均长度保留2位小数)。
样例
输入样例1
4
aaabbaaac
szuszuszuszu
aaaaaa
apple
输出样例1
aaa bb c 2.25
s z u 1.00
aaaaaa 6.00
a pp l e 1.25
AC代码
#include <stdio.h>
#include <string.h>
char s[111];
char hash[111][111];
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
memset(s, 0, sizeof(s));
memset(hash, 0, sizeof(hash));
scanf("%s", s);
int cnt = 0, loc = 0;
for (int i = 0; i < strlen(s); i++)
{
hash[cnt][loc++] = s[i];
if (s[i] != s[i + 1])
{
cnt++;
loc = 0;
}
}
for (int i = 0; i < cnt; i++)
{
int flag = 1;
for (int j = 0; j < i; j++)
{
flag = strcmp(hash[i], hash[j]);
if (!flag)
break;
}
if (flag)
printf("%s ", hash[i]);
}
printf("%.2f\n", 1.0 * strlen(s) / cnt);
}
return 0;
}