这个算RE吧
Q1 while语句的条件 貌似 有误,但是不会改.
Q2 scanf输入 貌似 没有写入map ,但是不会改.
Q3 vector,map 貌似 有点算法不完美 ,但是不会改.
Q4 C++有没有arccos啊啊啊 取倒数也可以,但是我问一下.
功能就是将两篇(英文)文档(##是分隔符)的词语作为矢量,求出它们的夹角,计算相似性.
代码如下,此问题不对应任何洛谷计算题.
#include<bits/stdc++.h>
using namespace std;
char word[998];
vector<string> words;
map<string,int> doc1,doc2;
double mode1,mode2,cosv;
long long v;
double vv;
bool find(string s,vector<string> w){
for(int i=0;i<w.size();i++)
if(w[i]==s)return 1;
return 0;
}
int main(){
//doc1
while(word!="##"){
scanf("%s",word);
if(!find(word,words))
words.push_back(word);
doc1[word]++;
}
//doc2
while(word!="##"){
scanf("%s",word);
if(!find(word,words))
words.push_back(word);
doc2[word]++;
}
for(int i=0;i<words.size();i++){
v+=doc1[words[i]]*doc2[words[i]],
mode1+=doc1[words[i]]*doc1[words[i]],
mode2+=doc2[words[i]]*doc2[words[i]];
}
mode1=sqrt(mode1),mode2=sqrt(mode2);
cosv=v/(mode1*mode2);
vv=1/v;
printf("similarity is %lf %",vv);
return 0;
}