牛客网——华为题库(61~70)
华为题库
- 61.放苹果
- 62.查找输入整数二进制中1的个数
- 63.DNA序列
- 64.MP3光标位置
- 65.查找两个字符串a,b中的最长公共子串
- 66.配置文件恢复
- 67.24点游戏算法
- 68.成绩排序
- 69.矩阵乘法
- 70.矩阵乘法计算量估算
61.放苹果
#include <bits/stdc++.h>using namespace std;int process(int m, int n){if(m < 0 || n < 0){return 0;}else if(m == 1 || n == 1){return 1;}else {// 其他情况的时候,我们要计算少一个盘子,和所有盘子拿走一个苹果的情况return process(m, n - 1) + process(m - n, n); //}}int main(){int m = 0, n = 0;while(cin >> m >> n){int res = process(m, n);cout << res << endl;}return 0;
}
62.查找输入整数二进制中1的个数
#include<bits/stdc++.h>using namespace std;void process(int num, int& res){while(num != 0){res++;num = num & (num - 1);}
}int main(){int num = 0;while(cin>>num){int res = 0;process(num, res);cout<<res<<endl;}return 0;
}
63.DNA序列
#include <bits/stdc++.h>using namespace std;void process(string str, int num, string& res){vector<string> vec; //保存所有可能的字串for(int i = 0; i < str.size() - num + 1; i++){string tmp = str.substr(i, num);//cout << tmp << endl;vec.push_back(tmp);}int maxLen = INT_MIN;for(string s : vec){int t = 0;for(char ch : s){if(ch == 'C' || ch == 'G'){t++; //当前字串中C和G的个数}}if(t > maxLen){res = s;maxLen = t;}}
}int main(){string str = "";cin >> str;int n = 0;cin >> n;string res = "";process(str, n, res);cout << res << endl;return 0;
}
64.MP3光标位置
#include <bits/stdc++.h>using namespace std;int main(){//输入int musicNum = 0;string command = "";cin >> musicNum;cin >> command;//处理命令if(musicNum <= 4){int curMusicPos = 1; //当前光标的一个位置for(char ch : command){if(ch == 'U') curMusicPos--;else curMusicPos++;}//输出for(int i = 1; i <= musicNum; i++){cout << i << " ";}cout << endl;// 这里有一点要注意的就是有可能最后的位置超过了musicNum,要取一个模,变到这个范围内if(curMusicPos >= 0){cout << (curMusicPos) % musicNum << endl; //}else{cout << (musicNum + curMusicPos + 1) % musicNum << endl;}}else{ //musicNum > 4int curMusicPos = 1; //当前光标的一个位置int head = 1, end = 4; //head当前列表的头部是哪一首歌曲, end当前列表尾部是哪一首歌曲for(char ch : command){if(ch == 'U') {curMusicPos--;//如果光标比第一首歌曲的位置都要小if(curMusicPos < 1){ //跳到最后一页的位置上面curMusicPos = musicNum; //更新光标位置head = musicNum - 4 + 1; //更新列表头部end = musicNum; //更新列表尾部}else{ //如果光标没有小于1if(curMusicPos < head){ //如果当前位置要比当前的列表头还要小,说明要更新列表了head = curMusicPos; //更新列表头部end--; //更新列表尾部}}}// ch == 'D'else{ curMusicPos++;//如果光标比最后一首歌曲的位置都要大if(curMusicPos > musicNum){ //跳到第一页的位置上面curMusicPos = 1; //更新光标位置head = 1; //更新列表头部end = 4; //更新列表尾部}else{ //如果光标没有大于musicNumif(curMusicPos > end){ //如果当前位置要比当前的列表尾还要大,说明要更新列表了end = curMusicPos; //更新列表尾部head++; //更新列表头部}}}}//输出for(int i = head; i <= end; i++){cout << i << " ";}cout << endl;cout << curMusicPos << endl;}return 0;
}
65.查找两个字符串a,b中的最长公共子串
#include <bits/stdc++.h>using namespace std;//dp
//dp[i][j]表示 到s1第i个,到s2第j个为止 的公共子串长度 (其中s1较短)
void longestCommonSubsequence(string s1, string s2, string& res) {vector<vector<int>> dp(s1.size() + 1, vector<int>(s2.size() + 1, 0));int maxLength = INT_MIN, end = 0; //end表示字符串的末位位置 (最大不超过s1的长度)for(int i = 1; i <= s1.size(); i++){for(int j = 1; j <= s2.size(); j++){if(s1[i - 1] == s2[j - 1]){dp[i][j] = dp[i - 1][j - 1] + 1; //则增加长度}else{dp[i][j] = 0; // //该位置为0}if(dp[i][j] > maxLength){ //更新最大长度maxLength = dp[i][j];end = i - 1; //}}}res = s1.substr(end - maxLength + 1, maxLength);
}int main(){string s1 = "";string s2 = "";getline(cin, s1);getline(cin, s2);if(s1.length() > s2.length()){swap(s1, s2); //使较小的字符串在前} string res = "";longestCommonSubsequence(s1, s2, res);cout << res << endl;return 0;
}
66.配置文件恢复
#include <bits/stdc++.h>using namespace std;vector<pair<string, string>> youXiaoCommand = {{"reset", ""},{"reset", "board"},{"board", "add"},{"board", "delete"},{"reboot", "backplane"},{"backplane", "abort"}
};vector<string> commandRes = {"reset what","board fault","where to add","no board at all","impossible","install first"
};int main(){string str = "";while(getline(cin, str)){stringstream iss(str);string key1 = "", key2 = "";getline(iss, key1, ' '); //第一个关键字getline(iss, key2, ' '); //第二个关键字string res = "";int piPeiCount = 0; //记录匹配的关键字个数 (等于1时即唯一匹配到 即匹配成功)for(auto iter = youXiaoCommand.begin(); iter != youXiaoCommand.end(); iter++){int key1Pos = iter->first.find(key1); //key1在命令的前半部分第一次出现的下标 (为0匹配成功)int key2Pos; //key2在命令的前半部分第一次出现的下标 (为0匹配成功)if(key2 != ""){ //有key2key2Pos = iter->second.find(key2); //key2在命令的前半部分第一次出现的下标}else if(key2 == "" && iter->second.empty()){ //特殊情况匹配到命令 {"reset", ""},key2Pos = 0;}else{ //没匹配到key2Pos = -1;}if(key1Pos == 0 && key2Pos == 0){ //匹配成功piPeiCount++; //匹配成功的个数res = commandRes[iter - youXiaoCommand.begin()]; //索引位置:iter - youXiaoCommand.begin()}}if(piPeiCount == 1){ //匹配成功且为唯一匹配cout << res << endl;}else{//否则就是没有匹配成功,输出"unknown command"cout<<"unknown command"<<endl; }}return 0;
}
67.24点游戏算法
#include <bits/stdc++.h>using namespace std;double num = 1e-6;
int ANS = 24;
int ADD = 0, SUB = 1, MUL = 2, DIV = 3;bool process(vector<double>& l){if(l.size() == 0) return false;if(l.size() == 1) return abs(24 - l[0]) < num; //只剩一个数字int size = l.size(); //for(int i = 0; i < size; i++){for(int j = 0; j < size; j++){if(i != j){ //两个索引不能相等vector<double> l2;for(int k = 0; k < size; k++){if(k != i && k != j){l2.push_back(l[k]);//先将本轮不做处理的数字放进去}} //"二合一"for(int m = 0; m < 4; m++){ //四种处理:加减乘除if(m == ADD){l2.push_back(l[i] + l[j]);}else if(m == SUB){l2.push_back(l[i] - l[j]);}else if(m == MUL){l2.push_back(l[i] * l[j]);}else{if(abs(l[j]) < num) continue; //除的时候分母不能为0l2.push_back(l[i] / l[j]);}if(process(l2)){return true; //}l2.pop_back(); //} }}}return false;
}int main(){int a = 0, b = 0, c = 0, d = 0;while(cin >> a >> b >> c >> d){//二合一 + dfsvector<double> l1;l1.push_back((double)a);l1.push_back((double)b);l1.push_back((double)c);l1.push_back((double)d);bool res = process(l1);if(res)cout << "true" << endl;elsecout << "false" << endl;}return 0;
}
68.成绩排序
#include <bits/stdc++.h>using namespace std;struct cmpJiangXu{bool operator()(const pair<string, int>& a, const pair<string, int>& b){return a.second > b.second;}
};struct cmpShengXu{bool operator()(const pair<string, int>& a, const pair<string, int>& b){return a.second < b.second;}
};int main(){int n = 0;//法一/*while(cin >> n){int sortWay = 0; //排序方式cin >> sortWay;//输入名字和成绩vector<pair<string, int>> info;for(int i = 0; i < n; i++){string name = "";int score = 0;cin >> name >> score;info.push_back(make_pair(name, score));}//排序//stable的函数可保证相等元素的原本相对次序在排序后保持不变if(sortWay == 0){//从高到低 降序stable_sort(info.begin(), info.end(), cmpJiangXu());}else if(sortWay == 1){//从低到高 升序stable_sort(info.begin(), info.end(), cmpShengXu());}//输出for(auto iter = info.begin(); iter != info.end(); iter++){cout << iter->first << " " << iter->second << endl;}}*///法二while(cin >> n){int sortWay = 0; //排序方式cin >> sortWay;//输入名字和成绩map<int, vector<string>> info;for(int i = 0; i < n; i++){ //建立成绩和名字的映射string name = "";int score = 0;cin >> name >> score;info[score].push_back(name);}//排序if(sortWay == 0){//从高到低 降序//逆序遍历 // rbegin rend//输出for(auto iter = info.rbegin(); iter != info.rend(); iter++){ //iter++for(int i = 0; i < iter->second.size(); i++){ //成绩相同时,按照输入顺序输出cout << iter->second[i] << " " << iter->first << endl;} }}else if(sortWay == 1){//从低到高 升序//顺序遍历for(auto iter = info.begin(); iter != info.end(); iter++){ //iter++for(int i = 0; i < iter->second.size(); i++){cout << iter->second[i] << " " << iter->first << endl;} }} }return 0;
}
69.矩阵乘法
#include <bits/stdc++.h>using namespace std;int main(){//输入int firstRows = 0;int firstCols = 0;int secondRows = 0;int secondCols = 0;cin >> firstRows;cin >> firstCols;secondRows = firstCols;cin >> secondCols;int num = 0;//矩阵元素//输入第一个矩阵vector<vector<int>> firstMatrix(firstRows, vector<int>(firstCols, 0)); for(int i = 0; i < firstRows; i++){for(int j = 0; j < firstCols; j++){cin >> num;firstMatrix[i][j] = num;}}//输入第二个矩阵vector<vector<int>> secondMatrix(secondRows, vector<int>(secondCols, 0));for(int i = 0; i < secondRows; i++){for(int j = 0; j < secondCols; j++){cin >> num;secondMatrix[i][j] = num;}}//计算相乘结果矩阵vector<vector<int>> mulRes(firstRows, vector<int>(secondCols, 0));for(int i = 0; i < firstRows; i++){for(int j = 0; j < secondCols; j++){for(int k = 0; k < firstCols; k++){mulRes[i][j] += firstMatrix[i][k] * secondMatrix[k][j]; //相乘相加}}}//输出for(int i = 0; i < firstRows; i++){for(int j = 0; j < secondCols; j++){cout << mulRes[i][j] << " ";}cout << endl; //换行,输出矩阵的下一行元素}return 0;
}
70.矩阵乘法计算量估算
#include <bits/stdc++.h>using namespace std;int main(){int n = 0;while(cin >> n){vector<pair<int, int>> matrixs(n); //行数和列数for(int i = 0; i < n; i++){cin >> matrixs[i].first;cin >> matrixs[i].second;}string s = "";cin >> s;//矩阵乘法 第一行第一列相乘相加//A是一个50×10的矩阵,B是10×20的矩阵 则次数为:50×10×20int res = 0;stack<pair<int, int>> st; //栈存储矩阵的行数和列数for(int i = 0; i < s.size(); i++){ //遍历字符串if(s[i] == ')'){ //如果是右括号,则栈弹出两个元素,并累加乘法次数auto y = st.top(); //后面的矩阵st.pop();auto x = st.top(); //前面的矩阵st.pop();if(x.second == y.first){res += x.first * x.second * y.second;st.push({x.first, y.second}); // //把形成的新矩阵的行数和列数入栈}///*else if(y.second == x.first){res += y.first * y.second * x.second;st.push({y.first, x.second}); //把形成的新矩阵的行数和列数入栈}*/}else if(s[i] != '('){ 如果是字符,则直接入栈//else if(isalpha(s[i])){ // A是第一个矩阵 它的行数和列数对应matrix[0]int t = s[i] - 'A';st.push(make_pair(matrixs[t].first, matrixs[t].second));}}//输出cout << res << endl;}return 0;
}
牛客网——华为题库(61~70)相关推荐
- 牛客网——华为题库(71~80)
华为题库 71.字符串通配符 72.百钱买百鸡问题 73.计算日期到天数转换 74.参数解析 75.公共子串计算 76.尼科彻斯定理 77.火车进站 80.整型数组合并 71.字符串通配符 #incl ...
- 牛客网——华为题库(91~100)
华为题库 91.走方格的方案数 92.在字符串中找出连续最长的数字串 93.数组分组 94.记票统计 95.人民币转换 96.表示数字 97.记负均正 98.自动售货系统 99.自守数 100.等差数 ...
- 牛客网——华为题库(11~20)
华为题库 11.数字颠倒 12.字符串反转 13.句子逆序 14.字符串排序 15.求int型正整数在内存中存储时1的个数 16.购物单 17.坐标移动 18.识别有效的IP地址和掩码并进行分类统计 ...
- 牛客网——华为题库(41~50)
华为题库 41.称砝码 42.学英语 43.迷宫问题 44.Sudoku 45.名字的漂亮度 46.截取字符串 48.从单向链表中删除指定值的节点 50.四则运算 41.称砝码 #include &l ...
- 牛客网-SQL题库笔记
牛客网-SQL题库笔记 01.最晚入职员工的所有信息 02.查找入职员工时间排名倒数第三的员工所有信息 03.查找各个部门当前领导当前薪水详情以及其对应部门编号 04.查找所有已经分配部门的员工的la ...
- 牛客网sql题库(1-30题)—— 个人答案与过程解析
本篇博客分享一下我在牛客网sql题库刷题时,自己敲出来的结果.结果均通过了牛客网的结果验证. 具体的题目就不放在博客中了,感兴趣可以自行去搜索牛客网,找到sql题库在线编程 每道题下面都有我自己写的题 ...
- python爬取学校题库_如何使用 Python 爬虫爬取牛客网 Java 题库?
[原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...
- 如何使用 Python 爬虫爬取牛客网 Java 题库?
[原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...
- 牛客网数据开发题库_牛客网SQL题库NO.32~40
不要问为什么没有31题,大概被牛客吞掉了吧,哈哈哈哈 SQL 32[简单] 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 CREA ...
最新文章
- 【Git】Git 标签使用 ( 创建并查询标签 | 推送单个标签到远程仓库 | 推送所有标签到远程仓库 | 删除远程仓库的标签 )
- 基于ABP落地领域驱动设计-05.实体创建和更新最佳实践
- IOC操作Bean管理XML方式(注入外部bean)
- LFFD 再升级!新增行人和人头检测模型,还有了优化的C++实现
- ucGUI 架构介绍
- python嵌入shell代码_小白进!嵌入式开发如何快速入门?
- Android 系统(41)---善用工具
- opencv 仿射变换与透视变换详解
- open函数返回-1_Linux驱动开发 / 字符设备驱动内幕 (1)
- 基于python的新闻发布系统
- PMP项目管理-项目成本管理(3)
- 大觉寺到鹫峰线路_大觉寺-萝卜地北尖-鹫峰徒步线路攻略--登山备查
- Ubuntu18.04 + RTX2080Ti + CUDA +cudnn 环境配置
- 1分钟学会PS背景虚化
- 前端开发培训哪个比较好
- 使用Linux Deploy在android手机上部署Ubuntu
- Socket网络编程面试题
- linux 设置系统时间为当前网络时间
- 使用xgboost进行特征选择
- php trie,数据结构-PHP 字典树(Trie)的实现
热门文章
- 肯德基推出“爷爷自在茶”,多赛道起跑是否会押中又一个宝
- Spark Kryo探索
- leetcode 1129. 颜色交替的最短路径【BSF方法图解-python3实现过程详解】
- java SNS网络系统_JEESNS首页、文档和下载 - Java 开源 SNS 社区系统 - OSCHINA - 中文开源技术交流社区...
- JOS学习笔记(一)
- 榆木搜官网_网路已为您准备好,榆木
- 超轻量级的Gow,替代cgwin
- 普渡大学统计与计算机科学,普渡大学西拉法叶校区计算机科学世界排名2017年最新排名第31(THE世界排名)...
- 机器学习和深度学习路线
- g-code 命令解释_2