华为题库

  • 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. vue 打开html流_【报Bug】“纯nvue”模式下,web-view无法打开本地html
  2. 蓝桥杯2021年第十二届C++省赛第三题-直线
  3. 使用win10远程控制ubuntu16.04
  4. 阿里云主机泄露Access Key到getshell
  5. 好的Python培训机构具备的条件
  6. 常见计算机软件故障有哪些,电脑常见问题有哪些,电脑硬件/软件常见问题及处理方法...
  7. 口碑、银盒子相关功能是否支持问题
  8. Android RecyclerView实现类似于老虎机抽奖,数字滚动等动画效果
  9. component组件
  10. @DateTimeFormat@JsonFormat注解详解
  11. Sql处理数字保留两位小数,而且四舍五入。
  12. 最好的卡尔曼滤波讲解
  13. 解决“ValueError: Unknown resampling filter (107). Use Image.NEAREST (0), Image.LANCZOS (1), Image.BIL”
  14. 经历 C/C++ 大辩论之后
  15. JS高级-分享一个别踩白块的小游戏(源码)
  16. 基于透镜成像学习策略的灰狼优化算法-附代码
  17. 科普 | 浅谈基因检测
  18. win8怎么查看计算机配置,Win8系统查看电脑显卡配置参数的五个方法
  19. php验证法则是10位数字,WebGeeker-Validation: 一个强大的 PHP 参数验证器
  20. mysql修改root密码 工具下载_学习mysql root密码修改的方法及工具使用

热门文章

  1. Git 客户端 - 可视化工具 Fork 使用
  2. linux 设备直通,使用virtualbox运行物理硬盘的系统 USB设备直通,支持网银、刷...
  3. Python爬虫——百度+新浪微盘下载歌曲
  4. 2155: 神秘商人的救赎
  5. 如何锁定MATLAB 图片大小,哪位亲知道怎么把图片做成固定大小啊比如200*230什么的这种? 爱问知识人...
  6. 淘宝开放平台-速卖通客户店铺数据获取
  7. 小程序源码:智力考验看成语猜古诗句微信小程序-多玩法安装简单
  8. 农村经济与科技杂志农村经济与科技杂志社农村经济与科技编辑部2022年第13期目录
  9. 搭建之星中文编程汉语编程计算机快速入门教学教程
  10. nodejs glup打包工程问题