汤姆将实现他发明的一种新的编程语言。但是在实际开始研究之前,他想知道他的语言是否应该区分大小写。
一方面,对他而言,不区分大小写似乎更容易实现,但他担心这可能会导致缺少形成变量的字符组合的可能性,这意味着应使用更长的变量名来避免命名冲突(因为例如,你可以使用Hello
,HEllo
,heLLo
和一堆其他的可能性,如果语言是大小写敏感的,但只HELLO
如果没有)。
但是汤姆是一个细心的人,所以仅仅担心对他来说还不够。他想知道数字。
挑战
编写一个函数(或者完整的程序,如果您的语言不支持它们的话),给定一个整数n
作为输入,输出(或返回)一个长度字符串的可能排列数量的差异(n
不区分大小写)。
用汤姆的语言,变量名可以包括所有字母,下划线,以及从第二个字符开始的数字。
测试用例
Input (length of the variable) -> Output (difference between the possibilities with case sensitivity and the possibilities with case insensitivity)
0 -> 0
1 -> 26
2 -> 2340
5 -> 784304586
8 -> 206202813193260
9 -> 13057419408922746
非竞争性C ++参考实现
void diff(int n) {
long long total[2] = {0, 0}; //array holding the result for case insensivity ([0]) and case sensitivity ([1])
for (int c = 1; c <= 2; c ++) //1 = insensitivity, 2 = sensitivity
for (int l = 1; l <= n; l ++) //each character of the name
if (l == 1)
total[c - 1] = 26 * c + 1; //first character can't be a number
else
total[c - 1] *= 26 * c + 1 + 10; //starting from the second character, characters can include numbers
std::cout << total[1] - total[0] << std::endl;
}
计分
汤姆喜欢高尔夫,所以最短的节目以字节为单位获胜。
注意
没关系,如果后两个测试用例由于数值精度而不合适。毕竟,我什至不确定我的代码是否正确处理了9号。