1.给你一个自然数n,求[6,n]之内的所有素数中,两两之和为偶数的那些偶数。
void EratosthenesSieve(vector<bool> &A,int n)
{
for(int i=2;i*i<=n;++i)
{
if(A[i])
{
for(int j=i*i;j<=n;j+=i)A[j]=false;
}
}
}
vector<int> f(int n)
{
vector<int> result;
if(n<6)return result;
vector<bool> A(n+1,true);
EratosthenesSieve(A,n);
for(int i=6;i<=n-1;++i)
{
if(!A[i])continue;
for(int j=i+1;j<=n;++j)
{
if(!A[j])continue;
result.push_back(i+j);
}
}
result.erase(unique(result.begin(),result.end()),result.end());
return result;
}
2.用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平,最多可以从y个小球中找出较轻的那个,求y与x的关系式。
y=3^x
3.输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如,输入数组{32,321},则输出32132。
//仿函数
struct cmp
{
bool operator()(string x,string y)
{
return (x+y)<(y+x);
}
};
string f(vector<int> a)
{
int n=a.size();
vector<string> b(n);
for(int i=0;i<n;++i)
{
stringstream stream;
stream<<a[i];
stream>>b[i];
}
sort(b.begin(),b.end(),cmp());
string result;
for(int i=0;i<n;++i)result+=b[i];
return result;
}