全部评论
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);
}
}
}
}
}
}
申请一个数组作为标记,从下遍历2将其中的2的倍数标记为合数,这样会少很多
我理解错了,所以做错了
我用的筛选+暴力,但是没有测试用例的地方,连代码能不能编译通过都不知道
素数筛选+回溯
筛选+暴力搜索会超时?
素数筛选+回溯
这笔试是什么情况?
无聊的时候 写的 看看吧 #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; }
今晚有笔试??
会超时?
相关推荐
查看15道真题和解析 点赞 评论 收藏
分享
程序员小白条:第二个项目就别写了.....这简历本来就是靠学历吃面试的,你要是不是92,连中小厂都没机会面试
点赞 评论 收藏
分享