B站笔试题
挺简单的题
1. 按反转单词的顺序 ab cd -> cd ab
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int main() {
string s,ans;
getline(cin,s);
stringstream ss;
ss<<s;
s.clear();
while(ss>>s) {
if(!ans.empty()) s+= " ";
ans = s+ans;
}
cout<<ans;
return 0;
} 2, 输出数组组合出的最小数 123 12-> 12123
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_N = 10010;
bool cmp(string &a, string &b) {
return a+b<b+a;
}
int main() {
vector<string> vs;
vector<int> va;
string s,ans;
int d=0;
scanf("%d",&d);
va.push_back(d);
while(scanf(",%d",&d)) {
va.push_back(d);
}
vs.resize(va.size());
for(int i=0;i<va.size();i++) {
vs[i] = to_string(va[i]);
}
sort(vs.begin(),vs.end(),cmp);
for(auto ts: vs) {
ans+=ts;
}
while(ans[0] == '0') ans.erase(ans.begin());
cout<<ans;
return 0;;
} 3. 01背包原题
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_N = 10010;
int main() {
int N,M;
cin>>N>>M;
vector<int> c(N),v(N);
for(int i=0;i<N;i++) {
cin>>c[i];
}
for(int i=0;i<N;i++) {
cin>>v[i];
}
vector<vector<int>> dp(N+1,vector<int>(M,0));
for(int i=1;i<=N;i++) {
for(int j=0; j <= M; j++) {
dp[i][j] = dp[i-1][j];
if(j>=c[i-1]) dp[i][j] = max(dp[i][j],dp[i-1][j-c[i-1]] + v[i-1]);
}
}
cout<<dp[N][M];
return 0;;
}
查看8道真题和解析