分数 15 作者 陈越 单位 浙江大学
上图是新浪微博上的一则趣闻,是瑞典斯德哥尔摩火车上的一道题,看上去是段伪代码:
s = ''
a = '1112031584'
for (i = 1; i < length(a); i++) {
if (a[i] % 2 == a[i-1] % 2) {
s += max(a[i], a[i-1])
}
}
goto_url('www.multisoft.se/' + s)
其中字符串的 +
操作是连接两个字符串的意思。所以这道题其实是让大家访问网站 www.multisoft.se/112358
(注意:比赛中千万不要访问这个网址!!!)。
当然,能通过上述算法得到 112358
的原始字符串 a
是不唯一的。本题就请你判断,两个给定的原始字符串,能否通过上述算法得到相同的输出?
输入为两行仅由数字组成的非空字符串,长度均不超过 104,以回车结束。
对两个字符串分别采用上述斯德哥尔摩火车上的算法进行处理。如果两个结果是一样的,则在一行中输出那个结果;否则分别输出各自对应的处理结果,每个占一行。题目保证输出结果不为空。
1112031584
011102315849
112358
111203158412334
12341112031584
1123583
112358
代码长度限制16 KB 时间限制400 ms 内存限制64 MB 栈限制8192 KB
将伪代码完善为一个函数,带入两个字符串,得出的的字符串在比较是否相等。
#include
using namespace std;
string gotourl(string x)
{
string s="";
for (int i = 1; i < x.length(); i++)
{
if (x[i] % 2 == x[i-1] % 2)
{
s += max(x[i], x[i-1]);
}
}
return s;
}
int main()
{
string a,b;
cin>>a>>b;
string s1=gotourl(a);
string s2=gotourl(b);
if(s1!=s2)cout<
说实话感觉龙龙的函数和原题给的伪代码几乎一模一样,哎这咋能使抄袭呢。
按照这么想,这题几乎是送分题,但如果你考虑用专门的字符串函数的话,或者你手写处理字符串函数的话,那并不是一件简单的事情。
所以说,做题思路比做题技巧更重要,思路正确,答案就做出一半了。
一些基本函数或者“+”都可以处理字符串,这也涉及了函数重写的基本特性,这也大大增加了题目的理解难度,代码也清晰易懂,远离了单独处理字符串的痛苦。