网易互娱笔试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三道还是不错的,可谁知道我今天面试快排都没写出来