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;; }