网易笔试,只完成了第一题
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;
}