酷酷的单词

xiaoxiao2021-02-27  356

输入一些仅由小写字母组成的单词。你的任务是统计有多少个单词是“酷”的,即每种字母出现的次数都不同。 比如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; }
转载请注明原文地址: https://www.6miu.com/read-16946.html

最新回复(0)