全部评论
public class Test {
public static void main(String[] args) {
int sum=68;//假设所求三数和为68
Set<Integer> s=new HashSet();
ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
for (int i = 2; i < 100; i++) {//假设求100以内的质数
int j;
for (j = 2; j <= i/2; j++) {
if (i % j == 0) {
break;
}
}
if (j > i/2) {
s.add(i);
}
}
//System.out.println( " ");
for(int i : s){
for(int j:s ){
if(i!=j){
int a=sum-i-j;
if(s.contains(a)&&a!=i){
ArrayList<Integer> ss=new ArrayList<Integer>();
ss.add(a);
ss.add(i);
ss.add(j);
res.add(ss);
}
}
}
}
}
}
送花
回复
分享
会超时?
送花
回复
分享
滴滴
官网直投
今晚有笔试??
送花
回复
分享
无聊的时候 写的 看看吧 #include <stdio.h> #include <iostream> #include <unordered_map> #include <vector> using namespace std; bool IsShuSu(int n) { for (int i = 2; i <= sqrt(n); i++) { if (n %i == 0) { return false; } } return true; } void Print(int n) { vector<int> num; vector<vector<int>> res; for (int i = 2; i < n - 2; i++) { if (IsShuSu(i)) { num.push_back(i); } } for (int i = 0; i < num.size() - 2; i++) { int j = i + 1; int k = num.size() - 1; while (j < k) { if (num[i] + num[j] + num[k] == n) { vector<int> temp = { num[i], num[j], num[k] }; res.push_back(temp); j++; k--; } else if (num[i] + num[j] + num[k] < n) { j++; } else { k--; } } } if (res.size() == 0) { cout << "No" << endl; } for (int i = 0; i < res.size(); i++) { for (int j = 0; j < res[i].size(); j++) { cout << res[i][j] << " "; } cout << endl; } return; } int main(void) { int n = 0; while (cin >> n) { Print(n); } return 0; }
送花
回复
分享
这笔试是什么情况?
送花
回复
分享
素数筛选+回溯
送花
回复
分享
筛选+暴力搜索会超时?
送花
回复
分享
素数筛选+回溯
送花
回复
分享
我用的筛选+暴力,但是没有测试用例的地方,连代码能不能编译通过都不知道
送花
回复
分享
我理解错了,所以做错了
送花
回复
分享
申请一个数组作为标记,从下遍历2将其中的2的倍数标记为合数,这样会少很多
送花
回复
分享
相关推荐
投递众安保险等公司10个岗位 >
点赞 评论 收藏
转发