网易互娱笔试4.11 服务端 1,2,4AC
第一题,九进制加法,先小数点左右添0对齐
class Solution { public: /** * 接收两个表示9进制数的字符串,返回表示它们相加后的9进制数的字符串 * @param num1 string字符串 第一个加数 * @param num2 string字符串 第二个加数 * @return string字符串 */ string add(string num1, string num2) { // write code here stack<char> value; int i=findDot(num1); int j=findDot(num2); int n1=num1.size(),n2=num2.size(); int ls=i; if(i!=j){ if(i>j){ ls=i; num2=string(i-j,'0')+num2; }else if(i<j){ ls=j; num1=string(j-i,'0')+num1; } } int rs=n1-i; if((n2-j)!=(n1-i)){ if((n2-j)>(n1-i)){ rs=n2-j; num1=num1+string(n2-j-n1+i,'0'); }else if((n2-j)<(n1-i)){ num2=num2+string(n1-i-n2+j,'0'); } } int len=ls+rs; string s(len,'0'); int jin=0; for(int i=len-1;i>=0;i--){ if(num1[i]=='.'){ s[i]='.'; }else{ s[i]=ninePlus(num1[i],num2[i],jin); } } if(jin==1){ s=string(1,'1')+s; } return s; } int findDot(string &s){ for(int i=0;i<s.size();i++){ if(s[i]=='.'){ return i; } } return s.size(); } char ninePlus(char &a,char&b, int &jin){ int res=a+b-'0'-'0'+jin; if(res>=9){ res=res-9; jin=1; }else{ jin=0; } return res+'0'; } };
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ int N; cin>>N; vector<int> work(N,0); vector<int> plan(N,0); for(int i=0;i<N;i++){ int tmp; cin>>tmp; work[i]=tmp; } for(int i=0;i<N;i++){ int tmp; cin>>tmp; plan[i]=tmp; } int M; cin>>M; sort(work.begin(),work.end()); sort(plan.begin(),plan.end()); long long res=1; int count=0; for(int i=0;i<N;i++){ for(int j=count;j<N;j++){ if(work[i]>=plan[j]){ count++; }else{ break; } } res=res*(count-i)%M; } cout<<res<<endl; return 0; }
第四题,快递箱
class Solution { public: /** * * @param boxes int整型二维数组 * @param boxesRowLen int boxes数组行数 * @param boxesColLen int* boxes数组列数 * @return int整型 */ vector<vector<int>> num; int maxBoxes(int** boxes, int boxesRowLen, int* boxesColLen) { // write code here if(boxesRowLen==0) return 0; for(int i=0;i<boxesRowLen;i++){ vector<int> tmp(*boxesColLen,0); for(int j=0;j<*boxesColLen;j++){ tmp[j]=boxes[i][j]; } num.push_back(tmp); } sort(num.begin(),num.end()); vector<long long>dp(boxesRowLen,1); long long result=1; for(int i=1;i<num.size();i++){ for(int j=0;j<i;j++){ int flag=true; for(int k=0;k<num[i].size();k++){ if(num[i][k]<=num[j][k]){ flag=false; break; } } if(flag==true){ dp[i]=max(dp[i],dp[j]+1); } } result=max(result,dp[i]); } return result; } };四道A三道还是不错的,可谁知道我今天面试快排都没写出来