9.3 京东C++笔试
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; }