输入一些仅由小写字母组成的单词。你的任务是统计有多少个单词是“酷”的,即每种字母出现的次数都不同。 比如ada是酷的,因为a出现2次,d出现1次,而1和2不同。再比如,banana也是酷的,因为a出现3次,n出现2次,b出现1次。但是,bbacccd不是酷的,因为a和d出现的次数相同(均为1次)。
Input输入包含不超过30组数据。每组数据第一行为单词个数n (1<=n<=10000)。以下n行各包含一个单词,字母个数为1~30。
Output对于每组数据,输出测试点编号和酷单词的个数。
Sample Input 2 ada bbacccd 2 illness a Sample Output Case 1: 1 Case 2: 0我的想法就是直接定义一个数组,用来存26个字母出现了多少次
再对这个数组进行比较如果发现有相同的那么就结束
#include<cstdio>
#include<cstring> #include<iostream> using namespace std; int main() { int n; int count1=1; char xx[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; while(~scanf("%d",&n)) { int p[30]; //int count2=0; int sum = 0; while(n--) { memset(p,0,sizeof(p)); for(int i=0;i<30;i++) p[i] = i; int count2 = 0; string s; cin>>s; int flag = 0; int len = s.length(); for(int i=0;i<len;i++) { for(int j=0;j<strlen(xx);j++) if(s[i]==xx[j]){ p[j]++; break; } } for(int i=0;i<26;i++) { if(p[i]-i == 0) continue; for(int j=0;j<26;j++){ if((p[i]-i)==(p[j]-j)&&(p[i]-i)!=0&&(p[j]-j)!=0&&i!=j){ flag = 1; break; } } if(flag) break; } if(!flag){ count2++; } else count2 = 0; if(len == 1) count2 = 0; sum+=count2; } printf("Case %d: %d\n",count1++,sum); } return 0; }