C++——计算最大和子矩阵问题

描述 计算矩阵中,最大和的子矩阵,并输出最大的和 测试用例 用例一: $$\begin{equation} \begin{bmatrix*}[c] -3 & -5 & -1 & 5 \newline 2 & -4 & -2 & 4 \newline -1 & 3 & -1 & 3 \end{bmatrix*} \end{equation}$$ 用例二: $$\begin{equation} \begin{bmatrix*}[c] -3 & -5 & -1 & 5 \newline 9 & -4 & -2 & 4 \newline -1 & 3 & -1 & 3 \end{bmatrix*} \end{equation}$$ 用例三: $$\begin{equation} \begin{bmatrix*}[c] -3 & -5 & -1 & 5 \newline 7 & -4 & -2 & 4 \newline -1 & 3 & -1 & 3 \end{bmatrix*} \end{equation}$$...

September 27, 2022 · 8 min · Rick Cui

C++——旋转骰子问题

方法一:使用字符串 注意 : 字符与字符相加返回的是一个整数 字符串与字符相加的问题: 可以使用 + 号运算符,但其中一个操作数需要是 string 类型 如果需要连续相加多个字符,前两个操作数必须有一个是 string 类型的 可以使用 string.append 方法 控制台输入字符串的问题,如果直接使用 cin >> str,遇到空格和回车都会终止读取 例如:在字符串 s 后面添加 ‘a’、‘b’、‘c’ 三个字符 参考 C++ 运算符优先级和结合性 string s; s = s + 'a' + 'b' + 'c'; // 正确 s += 'a' + 'b' + 'c'; // 错误 s = 'a' + 'b' + 'c' + s; // 错误 int main(){ string LR = "1625", FB = "3645", AC = "1324"; string mov; getline(cin, mov); for (char c : mov) { string tmp = ""; switch (c) { case 'L': case 'R': { if (c == 'L') { // LR = tmp + LR[3] + LR[0] + LR[1] + LR[2]; LR = LR[3] + string(LR, 0, 3); } else { // LR = tmp + LR[1] + LR[2] + LR[3] + LR[0]; LR = string(LR, 1, 3) + LR[0]; } // FB = tmp + FB[0] + LR[1] + FB[2] + LR[3]; FB[1] = LR[1]; FB[3] = LR[3]; // AC = tmp + LR[0] + AC[1] + LR[2] + AC[3]; AC[0] = LR[0]; AC[2] = LR[2]; break; } case 'F': case 'B': { if (c == 'F') { // FB = tmp + FB[3] + FB[0] + FB[1] + FB[2]; FB = FB[3] + string(FB, 0, 3); } else { // FB = tmp + FB[1] + FB[2] + FB[3] + FB[0]; FB = string(FB, 1, 3) + FB[0]; } // LR = tmp + LR[0] + FB[1] + LR[2] + FB[3]; LR[1] = FB[1]; LR[3] = FB[3]; // AC = tmp + AC[0] + FB[0] + AC[2] + FB[2]; AC[1] = FB[0]; AC[3] = FB[2]; break; } case 'A': case 'C': { if (c == 'A') { AC = tmp + AC[3] + AC[0] + AC[1] + AC[2]; } else { AC = tmp + AC[1] + AC[2] + AC[3] + AC[0]; } LR = tmp + AC[0] + LR[1] + AC[2] + LR[3]; FB = tmp + AC[1] + FB[1] + AC[3] + FB[3]; break; } default: break; } } cout << LR[0] << LR[2] << FB[0] << FB[2] << LR[3] << LR[1]; return 0; } 方法二:使用 deque 容器 int main() { //string LR = "1625", FB = "3645", AC = "1324"; deque<char> LR, FB, AC; LR....

September 23, 2022 · 4 min · Rick Cui

C++——List、strcpy_s、strtok_s 使用

目标 对输入的字符串中的单词,把给定的索引区间中的单词逆序 方法一 通过 strtok(strtok_s、strtok_r) 分割字符串 使用 list 容器存储各个单词 可以通过前插的方式反转指定区间的单词 也可以通过前后交换的方式反转指定区间的单词 顺序输出 list 中的单词 int main(){ string str = "I am a developer"; char *cArr = new char[str.size()+1]{0}; strcpy_s(cArr, str.size()+1, str.c_str()); // 注意:第二个参数,要拷贝的字符串的长度包括结尾的 '\0' char *w = nullptr, *rest = nullptr; list<string> wordList; w = strtok_s(cArr, " ", &rest); while (w) { wordList.push_back(w); w = strtok_s(nullptr, " ", &rest); } int startIndex = 0, endIndex = 0; cin >> startIndex >> endIndex; int len = wordList....

September 22, 2022 · 2 min · Rick Cui

C++——类模板双栈模拟队列

September 20, 2022 · 0 min · Rick Cui

C++——类模板

September 18, 2022 · 0 min · Rick Cui