前两题比较基础,第三题是拔高题,刚做完,记录一下,第三题没有通过,时间不够了(太菜了~~~~)
第一题:
输入的字符串超过8个字符的,按8个截一段,最后不足8个的补0到8个
最后将重新得到的字符串按升序排列
输入描述:输入一个数字N ,N个字符串 ,中间以空格隔开
输出描述:排序后的字符串
例:输入:2 abc 123456789 输出: 12345678 90000000 abc00000
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 5 using namespace std; 6 7 int main() { 8 int num; 9 while (cin >> num) 10 { 11 //vector<string> str_array; 12 vector<string> str_array_new; 13 for (int i = 0; i < num; i++) { 14 string str; 15 cin >> str; 16 //str_array.push_back(str); 17 while (str.length() > 8) 18 { 19 string str_temp(str.begin(), str.begin() + 8); 20 str_array_new.push_back(str_temp); 21 str.erase(str.begin(),str.begin() + 8); 22 } 23 while (str.length() < 8) 24 { 25 str.push_back(‘0‘); 26 } 27 str_array_new.push_back(str); 28 } 29 int length = str_array_new.size(); 30 for (int i = 0; i < length; i++) 31 { 32 for (int j = i + 1 ; j < length; j++) 33 { 34 if (str_array_new[j][0] < str_array_new[i][0]) { 35 string temp = str_array_new[i]; 36 str_array_new[i] = str_array_new[j]; 37 str_array_new[j] = temp; 38 } 39 } 40 } 41 for (int i = 0; i < length; i++) 42 { 43 cout << str_array_new[i] << ‘ ‘; 44 } 45 cout << endl; 46 } 47 48 system("pause"); 49 return 0; 50 }
第二题:
题目描述:输入一个字符串,含有括号(大括号,小括号,中括号),数字和字母,数字(n)之后必跟一个括号(测试用例里的括号都是匹配的),代表括号内的字符串重复(n)次。括号里可以有嵌套,即括号里含有括号。现在将输入的字符串逆序展开;
输入描述:字符串,例:abc3(A)
输出描述:字符串,例:AAAcba
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include<algorithm> 5 6 using namespace std; 7 8 int have_kuohao(string str) { 9 for (int i = 0; i < str.length(); i++) 10 { 11 if (str[i] == ‘(‘ || str[i] == ‘[‘ || str[i] == ‘{‘) 12 { 13 return 1; 14 } 15 16 } 17 return 0; 18 } 19 int main() 20 { 21 string str; 22 while (cin >> str) 23 { 24 //括号嵌套问题 25 //没有括号直接输出 26 if (have_kuohao(str) == 0) 27 { 28 reverse(str.begin(),str.end()); 29 cout << str << endl; 30 continue; 31 } 32 else 33 { 34 // 35 while (have_kuohao(str)) 36 { 37 int left; 38 int right; 39 for (int i = 0; i < str.length(); i++) 40 { 41 if (str[i] == ‘(‘ || str[i] == ‘[‘ || str[i] == ‘{‘) 42 { 43 left = i; 44 } 45 if (str[i] == ‘)‘ || str[i] == ‘]‘ || str[i] == ‘}‘) 46 { 47 right = i; 48 break; 49 } 50 } 51 //展开插入 52 int times = (int)(str[left - 1] - ‘0‘); 53 string temp_str(str.begin() + left + 1, str.begin() + right); 54 //在右括号后插入 55 int insert_end = right; 56 for (int i = 0; i < times - 1; i++) 57 { 58 for (int j = 0; j < temp_str.length(); j++) 59 { 60 str.insert(str.begin() + insert_end + 1, temp_str[j]); 61 //cout << str << endl; 62 insert_end ++; 63 } 64 } 65 //删除括号和数字 66 str.erase(str.begin() + right); 67 str.erase(str.begin() + left); 68 str.erase(str.begin() + left - 1 ); 69 } 70 reverse(str.begin(), str.end()); 71 //倒序输出 72 cout << str <<endl; 73 } 74 } 75 76 77 system("pause"); 78 return 0; 79 }
第三题:时间不够了,没写出来
题目描述:
输入一个N*M矩阵栅格,每个栅格都有一个高程值代表海拔高度,小明从出发点到终点有几条不同路径?每次只能往更高海拔的地方去,走过的地方不能再走,只能前后左右走。
例:输入:
4 5
0 1 0 0
0 2 3 3
0 3 0 0
0 4 5 6
0 7 6 0
0 1 4 1
第一行代表M*N,网格大小
后面是M*N的矩阵
最后一行前两个数字代表 起始坐标,后面两个数字代表 目的坐标(坐标从左上角(0,0)开始)。
输出 :2
即两条不同路径
解法:待更新~~~~~
原文:https://www.cnblogs.com/lijiaxin/p/10686491.html