A了两题
1. 赝品数量
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main(int argc,char** argv)
{
int n;
cin>>n;
vector<int> nums;
for(int i=0;i<n;i++){
int cur;
cin>>cur;
nums.push_back(cur);
}
int res(0);
unordered_map<int,int> mp;
int real_count(100001),real(0);
for(auto i:nums){
mp[i]++;
}
for(auto i:mp){
if(i.second>1) {
real_count=min(real_count,i.second);
real=i.first;
}
}
int temp(0);
if(real!=0){
for(auto i:mp){
if(i.first!=real)temp+=i.second;
}
}
res=real_count==100001?n-1:temp;
cout<<res<<endl;
return 0;
}
2.数字拆分
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main(int argc,char** argv)
{
int n;
cin>>n;
vector<int> nums;
for(int i=0;i<n;i++){
int cur;
cin>>cur;
nums.push_back(cur);
}
int res(0);
int max_nums(0);
for(auto i:nums){
if(i>max_nums) max_nums=i;
}
vector<int> dp(max_nums+1,100001);
dp[1]=0;
dp[2]=1;
for(int i=3;i<=max_nums;i++){
int res2(i);
for(int j=sqrt(i);j>=1;j--){
if(i%j==0)res2=min(res2,dp[j]+dp[i/j]+1);
}
dp[i]=min(1+dp[i-1],res2);
}
for(auto i:nums){
res+=dp[i];
}
cout<<res<<endl;
return 0;
}
#京东笔试#