网易笔试,只完成了第一题
1.素数的个数
牛牛现在有一个包含N的正整数的数组a,牛牛可以将其中的每个数a[i] 都拆成若干个和为 a[i] 的整数,牛牛想知道这个数组最多能有多少素数?
输入:
n 数组长度
n个整数 a[i]
1 <= n <= le6 1 <= a[i] <= le9
#include<bits/stdc++.h> using namespace std; int main() { long long n,num,res = 0; cin >> n; for(int i = 0; i < n; i++) { cin >> num; res += (num / 2); } cout << res << endl; return 0; }
复盘:21:25
2.排列题
还未做
3. 两个人平分物品,不能平分的丢弃
给了 n 个物品的价值。给两个人平分(数量可以不一样,价值总和要一样),可以舍弃那些没法平分掉物品,输出最少舍弃多少价值。
#include<bits/stdc++.h> using namespace std; int a[10000],n; int res; void dfs(int i, int s1, int s2, int delet) { if(i == n) //当第一轮分完,进行判断 { if(s1 == s2 && delet < res) { //若两个人的价值相等,判断丢弃值是否最小,是则更新 res = delet; } return; //结束本轮判断 } dfs(i+1,s1+a[i],s2,delet); //把a[i]分给第一个人 dfs(i+1,s1,s2+a[i],delet); //把a[i]分给第二个人 dfs(i+1,s1,s2,delet+a[i]); //丢弃 } int main() { int t; cin >> t; while(t--) { cin >> n; res = 0; for(int i = 0; i < n; i++) { cin >> a[i]; res += a[i]; } dfs(0,0,0,0); cout << res << endl; } return 0; }