题解 | #查找组成一个偶数最接近的两个素数#待修改
查找组成一个偶数最接近的两个素数
http://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
//测试20。。输出的是对的,测试其他的就错了,不知道为什么。
#include <iostream>
#include <set>
#include <vector>
using namespace std;
bool isss(int n)//判断是否为素数
{
int flag=0;
for (int i=2;i<n;i++)
{
if (n%i==0)
{flag=1;
break;}
}
if (flag==1)
return 0;
else
return 1;
}
int main ()
{
int ou;
while (cin>>ou)
{set<int> s;
vector<pair<int, int>> v;
vector<int> v2;
for (int i=2;i<ou;i++)//找出小于ou的所有苏苏
{
if (isss(i))
s.insert(i);
}
for (set<int>::iterator it1=s.begin();it1!=s.end();it1++)//找出所有相加等于ou的苏苏
{
for(set<int>::iterator it2=s.begin();it2!=s.end();it2++)
if (*it1+*it2==ou&&*it1-*it2>=0)//大于0保证不会重复输入相同的pair
{
v.push_back(make_pair(*it1,*it2));
v2.push_back(*it1-*it2);
}
}
int minn=0;
for (vector<int>::iterator i=v2.begin();i!=v2.end();i++)//找出最小的差值
{
if (*i<*(i+1))
minn=*i;
}
vector<int>::iterator i=v2.begin();
for (;i!=v2.end();i++)
{
if (*i==minn)
break;
}
int index=i-v2.begin();
vector<pair<int, int>> ::iterator jj=v.begin();
cout<<(*(jj+index)).first<<endl;
cout<<(*(jj+index)).second<<endl;
}
}