题目描述
输入一些仅由小写字母组成的单词。你的任务是统计有多少个单词是“酷”的,即每种字母出现的次数都不同。
比如 ada 是酷的,因为 a 出现 2 次,d 出现 1 次,而 1 和 2 不同。再比如,banana 也是酷的,
因为 a 出现 3 次,n 出现 2 次,b 出现 1 次。但是,bbacccd 不是酷的,因为 a 和 d 出现的次数相同(均为 1 次)。
比如 ada 是酷的,因为 a 出现 2 次,d 出现 1 次,而 1 和 2 不同。再比如,banana 也是酷的,
因为 a 出现 3 次,n 出现 2 次,b 出现 1 次。但是,bbacccd 不是酷的,因为 a 和 d 出现的次数相同(均为 1 次)。
输入
输入包含不超过 30 组数据。每组数据第一行为单词个数 n (1<=n<=10000)。以下 n 行各包含一个单词,字母个数为 1~30。
输出
对于每组数据,输出测试点编号和酷单词的个数。
样例输入
2
ada
bbacccd
2
illness
a
样例输出
Case 1: 1
Case 2: 0
题意,单词个数不能重复, 有一个重复就不是酷的了,因为单词个数很小,枚举一下就可以了。
代码:
# include <stdio.h>
# include <string.h>
struct qwe
{
int q;
int w;
}b[130];
int main(void)
{
int n, sum, w = 0;
while (~ scanf("%d", &n))
{
sum = 0;
w ++;
while (n --)
{
char a[31];
memset(b, 0, sizeof(b));
scanf("%s", a);
int d = strlen(a);
if (d == 1)
{
continue;
}
int i, j;
for (i = 0; i < d; i ++)
{
b[a[i]].q ++; // 出现一次加一次
b[a[i]].w = 1; // 判断这个字符是不是出现过
}
int qqq = 0;
for (i = 1; i <= 31; i ++) // 最大个数不超过30个 枚举31次就可以了
{
int c = 0;
for (j = 97; j <= 122; j ++) // 全是小写字符, 对应的ascll为97-122。
{
if (b[j].w == 1) // 是否出现过
{
if (b[j].q == i) // 出现一次 加1。
c ++;
}
}
if (c >= 2) // 有一个出现二次的就不是酷的,跳出
{
qqq = 1;
break;
}
}
if (qqq == 0)
sum ++;
}
printf("Case %d: %d\n", w, sum);
}
return 0;
}