算法竞赛入门经典 习题3-11

mac2022-06-30  102

UVa1588

Kickdown

看了好几遍题目,都认为第一个输入在下边,第二个输入在上边,但是uDebug上的测试死活不对,后来看了下其它博客,才知道上下顺序可以交换,可是原题中根本没说啊???

以及我越来越发现,这种在多重循环中满足一个就应该退出的流程,放在一个单独的函数里边是真的方便,满足条件直接return就好了,否则还得用各种标志位来判断这一层循环该不该退出。

#include <iostream> #include <string> using namespace std; size_t getLen(const string &strDown, const string &strUp) { size_t offset = 0; for (; offset < strDown.size(); offset++) { size_t j = 0; for (; j < strUp.size(); j++) { if (offset + j >= strDown.size()){ return offset + strUp.size(); } if(strDown[offset + j] - '0' + strUp[j] - '0' > 3) break; } if (j == strUp.size()){ return strDown.size(); } } return strDown.size() + strUp.size(); } int main() { string strDown, strUp; size_t len1, len2; while (cin >> strDown >> strUp){ len1 = getLen(strDown, strUp); len2 = getLen(strUp, strDown); if (len1 <= len2) cout << len1 << endl; else cout << len2 << endl; } return 0; } /* 2112112112 2212112 12121212 21212121 2211221122 21212 */
最新回复(0)