对于使用其他语言的同学,这里提供伪代码以及程序框图供参考 但是现在你知道_tta{_tta}_tta的值,你能求出原来的字符串吗?
某oj为了防止爬虫,做了一些反爬的技巧,比如提交表单的隐藏字段_tta{_tta}_tta。关于_tta{_tta}_tta的计算是这样子的。某oj服务器给你的浏览器一个长度为8{8}8的字符串,然后通过你浏览器的运行Js脚本对这个字符串进行计算(计算公式见下),然后计算对应出_tta{_tta}_tta值。因此你的爬虫需要需要去获取这个字符串,并且模拟这段js代码将字符串对应的_tta{_tta}_tta值,才能完成代码的提交。 这段代码故意使用很恶心的变量名来,防止爬虫,因此提供这段代码的c语言翻译版本。 int calculatetta(char* a) { int b = 0; for (int c = 0; c < strlen(a); ++c) { b = (b + (c + 1) * (c + 2) * a[c]) % 1009; if (c % 3 == 0) ++b; if (c % 2 == 0) b *= 2; if (c > 0) b -= ((int) (a[c / 2] / 2)) * (b % 5); while (b < 0) b += 1009; while (b >= 1009) b -= 1009; } return b; } 当然了,为了照顾到使用Python的同学,这里也同时提供Python语言的翻译版。 def calculatetta(a: str): b = 0 for c in range(len(a)): b = (b + (c + 1) * (c + 2) * ord(a[c])) % 1009 if c % 3 == 0: b = b + 1 if c % 2 == 0: b = b * 2 if c > 0: b = b - (ord(a[c // 2]) // 2) * (b % 5) while b < 0: b = b + 1009 while b >= 1009: b = b - 1009 return b 对于使用Java的同学,这里同样提供Java版本的代码片段 public static int calculatetta(String a) { int b = 0; for (int c = 0; c < a.length(); ++c) { b = (b + (c + 1) * (c + 2) * ((int) a.charAt(c))) % 1009; if (c % 3 == 0) ++b; if (c % 2 == 0) b *= 2; if (c > 0) b -= (((int) a.charAt(c / 2)) / 2) * (b % 5); while (b < 0) b += 1009; while (b >= 1009) b -= 1009; } return b; } 对于使用其他语言的同学,这里提供伪代码以及程序框图供参考 但是现在你知道_tta{_tta}_tta的值,你能求出原来的字符串吗? 你只需要给出一个满足的答案就可以。 换句话说,也就是你知道上面这个calculatetta{calculatetta}calculatetta函数的返回值b{b}b,你需要给出一个函数的传入参数a{a}a,使得calculatetta(a)=b{calculatetta(a)=b}calculatetta(a)=b。 要求你给出一个长度大小为8{8}8的字符串,只能含有大写字母、小写字母、数字中的一种或几种(不能输出特殊字符),且该字符串作为参数时calculatetta{calculatetta}calculatetta函数的返回值为给定的_tta{_tta}_tta。