http://acm.hdu.edu.cn/showproblem.php?pid=2072
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
题解:函数 A 用来判断两个单词是否相等,相等 return 0 ,不等 return 1;利用 for 循环把字符串中的空着找出来,两个空格之间的部分就是一个单词,把找出的单词存在 s 中,调用 A 函数 ,找出一句话中不同单词的数量
代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5+10; char s[100][100]; char a[maxn]; int A(int x,int y)//判断字符串是否相等 相等返回 0 ,不等返回 1 { int cnt=0; int len1=strlen(s[x]); int len2=strlen(s[y]); if(len1==len2) { for(int i=0; i<len1; i++) { if(s[x][i]!=s[y][i]) return 1; } return 0; } return 1; } int main() { while(gets(a))//i 行 { int ans=0; int n=0; if(a[0]=='#') break; int len=strlen(a); a[len]=' '; len++; a[len]=' '; for(int i=0; i<len; i++) { if(a[i]!=' ') for(int j=i; j<len; j++) { if(a[j]!=' ') continue; else { n++; for(int zzt=i; zzt<j; zzt++) { s[n][zzt-i]=a[zzt]; } s[n][j-i]=' '; i=j; break; } } } //cout<<n<<endl; //for(int i=1;i<=n;i++) //cout<<s[i]<<" "<<endl; for(int i=1; i<=n; i++) { int add=1; for(int j=i-1; j>0; j--) { add*=A(i,j); } if(add==1) ans++; } printf("%d ",ans); } return 0; }