题解 | #查找组成一个偶数最接近的两个素数#待修改
查找组成一个偶数最接近的两个素数
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; } }