B
#include<bits/stdc++.h>
using namespace std;
// int cmp(string s1,string s2)
// {
// int num1[26]={0},num2[26]={0};
// for(int i=0;i<s2.size();i++)
// {
// int x1=s1[i]-'a';
// int x2=s2[i]-'a';
// num1[x1]++;
// num2[x2]++;
// }
// int sum=0;
// for(int i=0;i<26;i++)
// {
// if(num1[i]>0)
// {
// sum+=min(num1[i],num2[i]);
// }
// }
// return sum;
// }
int cmp(string s1,string s2)
{
int sum=0;
for(int i=0;i<s2.size();i++)
{
if(s1[i]==s2[i])
sum++;
}
return sum;
}
bool cmp2(pair<string,int>a,pair<string,int>b)
{
return a.second>b.second;
}
int main()
{
int n;
vector<string>vec;
cin>>n;
string s;
while(n--)
{
cin>>s;
vec.push_back(s);
}
while(cin>>s)
{
int i=1; string yy;
auto a=std::find(vec.begin(),vec.end(),s);//如果有一样的
if(a!=vec.end())
{
yy=*a;
cout<<i<<' '<<s<<endl;
i++;
}
vector<pair<string,int>>xsvec;
for(auto it=vec.begin();it!=vec.end();it++)
{
if((*it).find(s)==0&&(*it).size()>s.size())//比原单词长的
{
cout<<i<<' '<<*it<<endl;
i++;
}
else if((s.size()==(*it).size())&&(*it)!=yy)//长度相等看相似度
{
int xs=cmp(s,*it);
xsvec.push_back(pair<string,int>(*it,xs));//相似度为0时 输出长度相等的
}
}
sort(xsvec.begin(),xsvec.end(),cmp2);
for(auto it=xsvec.begin();it!=xsvec.end();it++)
{
cout<<i<<' '<<it->first<<endl;
i++;
}
xsvec.clear();
cout<<endl;
}
}
E
#include<bits/stdc++.h>
using namespace std;
bool cmp(pair<int,int>a,pair<int,int>b)
{
if(a.second!=b.second)
return a.second<b.second;
else
return a.first>b.first;
}
int main()
{
int m;
map<int,int>mapp;
scanf("m=%d",&m);
int x;
while(scanf("%d",&x)!=EOF)
{
if(mapp.find(x)!=mapp.end())
mapp[x]++;
else
mapp[x]=1;
}
vector<pair<int,int>>vec(mapp.begin(),mapp.end());将map全部复制给vector
sort(vec.begin(),vec.end(),cmp);
for(int i=0;i<m;i++)
{
auto it=vec.end()-1;
cout<<it->first<<','<<it->second<<endl;
vec.pop_back();
}
}
G格式
#include<iostream>
#include<math.h>
using namespace std;
int isprime(int n)
{
if(n<2)
return 0;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n;
while(cin>>n&&n>6)
{
int c=0;
for(int i=2;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(isprime(i)&&isprime(j)&&i+j==n)
{
c++;
if(c%5!=1)
cout<<' ';
cout<<n<<'='<<i<<'+'<<j;
if(c%5==0)
{
cout<<endl;
}
}
}
}
if(c%5!=0)
cout<<endl;
}
}
F阶乘末尾到底有多少个零的问题
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int sum=0;
int k=n;
while(k>0)
{
k=k/5; //2x5=10 任何大于1的数x5都有一个零
sum+=k; //2x50=100 4x25=100 前面5的倍数少算一个0 所以要加上
} //8x125=1000 扔少算5的三次方的一个0
cout<<sum<<endl;
}
}
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int num[12]={0};
num[0]=1;
int c=0;
for(int i=2;i<=n;i++)
{
int jinwei=0;
int k=i;
while(k%10==0&&k>0)
{
k/=10;
c++;
}
for(int j=0;j<10;j++)
{
num[j]=num[j]*k+jinwei;
jinwei=num[j]/10;
num[j]%=10;
}
int len=0;
while(num[len]==0)
{
len++;
}
c+=len;
for(int j=0;j<len;j++)
{
num[j]=num[j+len];
}
}
cout<<c<<endl;
}
}