华为题库

  • 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)相关推荐

  1. 牛客网——华为题库(71~80)

    华为题库 71.字符串通配符 72.百钱买百鸡问题 73.计算日期到天数转换 74.参数解析 75.公共子串计算 76.尼科彻斯定理 77.火车进站 80.整型数组合并 71.字符串通配符 #incl ...

  2. 牛客网——华为题库(91~100)

    华为题库 91.走方格的方案数 92.在字符串中找出连续最长的数字串 93.数组分组 94.记票统计 95.人民币转换 96.表示数字 97.记负均正 98.自动售货系统 99.自守数 100.等差数 ...

  3. 牛客网——华为题库(11~20)

    华为题库 11.数字颠倒 12.字符串反转 13.句子逆序 14.字符串排序 15.求int型正整数在内存中存储时1的个数 16.购物单 17.坐标移动 18.识别有效的IP地址和掩码并进行分类统计 ...

  4. 牛客网——华为题库(41~50)

    华为题库 41.称砝码 42.学英语 43.迷宫问题 44.Sudoku 45.名字的漂亮度 46.截取字符串 48.从单向链表中删除指定值的节点 50.四则运算 41.称砝码 #include &l ...

  5. 牛客网-SQL题库笔记

    牛客网-SQL题库笔记 01.最晚入职员工的所有信息 02.查找入职员工时间排名倒数第三的员工所有信息 03.查找各个部门当前领导当前薪水详情以及其对应部门编号 04.查找所有已经分配部门的员工的la ...

  6. 牛客网sql题库(1-30题)—— 个人答案与过程解析

    本篇博客分享一下我在牛客网sql题库刷题时,自己敲出来的结果.结果均通过了牛客网的结果验证. 具体的题目就不放在博客中了,感兴趣可以自行去搜索牛客网,找到sql题库在线编程 每道题下面都有我自己写的题 ...

  7. python爬取学校题库_如何使用 Python 爬虫爬取牛客网 Java 题库?

    [原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...

  8. 如何使用 Python 爬虫爬取牛客网 Java 题库?

    [原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...

  9. 牛客网数据开发题库_牛客网SQL题库NO.32~40

    不要问为什么没有31题,大概被牛客吞掉了吧,哈哈哈哈 SQL 32[简单] 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 CREA ...

最新文章

  1. 【Git】Git 标签使用 ( 创建并查询标签 | 推送单个标签到远程仓库 | 推送所有标签到远程仓库 | 删除远程仓库的标签 )
  2. 基于ABP落地领域驱动设计-05.实体创建和更新最佳实践
  3. IOC操作Bean管理XML方式(注入外部bean)
  4. LFFD 再升级!新增行人和人头检测模型,还有了优化的C++实现
  5. ucGUI 架构介绍
  6. python嵌入shell代码_小白进!嵌入式开发如何快速入门?
  7. Android 系统(41)---善用工具
  8. opencv 仿射变换与透视变换详解
  9. open函数返回-1_Linux驱动开发 / 字符设备驱动内幕 (1)
  10. 基于python的新闻发布系统
  11. PMP项目管理-项目成本管理(3)
  12. 大觉寺到鹫峰线路_大觉寺-萝卜地北尖-鹫峰徒步线路攻略--登山备查
  13. Ubuntu18.04 + RTX2080Ti + CUDA +cudnn 环境配置
  14. 1分钟学会PS背景虚化
  15. 前端开发培训哪个比较好
  16. 使用Linux Deploy在android手机上部署Ubuntu
  17. Socket网络编程面试题
  18. linux 设置系统时间为当前网络时间
  19. 使用xgboost进行特征选择
  20. php trie,数据结构-PHP 字典树(Trie)的实现

热门文章

  1. 肯德基推出“爷爷自在茶”,多赛道起跑是否会押中又一个宝
  2. Spark Kryo探索
  3. leetcode 1129. 颜色交替的最短路径【BSF方法图解-python3实现过程详解】
  4. java SNS网络系统_JEESNS首页、文档和下载 - Java 开源 SNS 社区系统 - OSCHINA - 中文开源技术交流社区...
  5. JOS学习笔记(一)
  6. 榆木搜官网_网路已为您准备好,榆木
  7. 超轻量级的Gow,替代cgwin
  8. 普渡大学统计与计算机科学,普渡大学西拉法叶校区计算机科学世界排名2017年最新排名第31(THE世界排名)...
  9. 机器学习和深度学习路线
  10. g-code 命令解释_2