国内最大的摄影网站,wordpress插件进销存,wordpress支持的视频格式,网络编程技术期末考试目录 0 引言1 思路2 测试结果3 完整代码4 总结 0 引言 现在面临找工作问题#xff0c;做了几场笔试#xff0c;遇到了一个比较棘手的题目就是题目输入形式如下#xff1a; [ [3,1,1], [3,5,3], [3,2,1] ] 当时遇到这个问题还是比较慌的#xff0c;主要是之前没有遇到这样的… 目录 0 引言1 思路2 测试结果3 完整代码4 总结 0 引言 现在面临找工作问题做了几场笔试遇到了一个比较棘手的题目就是题目输入形式如下 [ [3,1,1], [3,5,3], [3,2,1] ] 当时遇到这个问题还是比较慌的主要是之前没有遇到这样的输入可能是太菜没刷的题目少了在这里记录一下自己解决此类问题的方法还有一个目的就是集思广益看看还有没有其他解法我想学习学习。
1 思路
以下为我个人解题思路仅供参考希望有大佬能在评论区给出你的妙招无论什么编程语言都可以主打一个一起学习
首先通过getline(cin,s)直接整行获取输入并存入字符串string s中将获得的字符s中[[和,[变为 (空字符)]]变为] 以上述为例处理后结果为 3,1,1] 3,5,3] 3,2,1] 接着使用stringstream ss(s)将字符串流分割字符串并存入数组再使用getline(ss, token, ])意思就是遇到]就将前面字符存入token中并且需要循环存放到token中接着上步结果处理得到 3,1,1 3,5,3 3,2,1 最后使用一维vector存放行矩阵用二维vector存放多行矩阵即可
话不多说直接上写好的函数代码
vectorvectorint vcenums(string input) {vectorvectorint array;// 第一步for(int i 0; i input.size()-1; i){if((input[i1] [ input[i] [) || (input[i1] [ input[i] ,)){input[i] ;input[i1] ;}else if(input[i1] ] input[i] ]){input[i1] ;}}input.erase(remove(input.begin(), input.end(), ), input.end());// cout input endl; // 可以取消注释处理结果// 将获取的数据存放到vector中stringstream ss(input);string token;while (getline(ss, token, ])) {// cout token endl;vectorint row;stringstream row_ss(token);string element;while (getline(row_ss, element, ,)) {row.push_back(stoi(element));}array.push_back(row);}return array;
}2 测试结果
测试用例输入[[2,3,5,8,10],[11,2,1,5,4],[1,2,7,4,5],[6,9,0,1,4]]
3 完整代码
以下为完整代码仅供参考如若有错欢迎提出我及时更正
#include iostream
#include vector
#include sstream
#include algorithm
using namespace std;vectorvectorint vcenums(string input) {vectorvectorint array;for(int i 0; i input.size()-1; i){if((input[i1] [ input[i] [) || (input[i1] [ input[i] ,)){input[i] ;input[i1] ;}else if(input[i1] ] input[i] ]){input[i1] ;}}input.erase(remove(input.begin(), input.end(), ), input.end());cout input endl;// 使用字符串流分割字符串并存入数组stringstream ss(input);string token;while (getline(ss, token, ])) {cout token endl;vectorint row;stringstream row_ss(token);string element;while (getline(row_ss, element, ,)) {row.push_back(stoi(element));}array.push_back(row);}return array;
}int main() {string s;vectorvector int M;while(getline(cin,s)){M vcenums(s);// 打印矩阵for(auto nums : M){for(auto i : nums){cout i ;}cout endl;}}return 0;
}
4 总结
其实可能有些笔试题不是很难难在输入如何处理不知道如何处理从而导致消耗了大量做其他题目时间所以遇到困难的输入还是需要锻炼自己用代码记录一下并突破自己下次遇到同样的输入情况就不会消耗大量时间。算是一种积累以后可能会整个专栏存放一些不常见得输入。 这道笔试的题目题目描述是从矩阵的左上角寻找最优路径到达矩阵右下角动态规划题 这道题本身不难就是有些时候真不知道处理输入会浪费大量时间通过上面得处理就可以得到二维矩阵然后就利用动态规划求出最短路径。