Tom은 그의 발명의 새로운 프로그래밍 언어를 구현하려고합니다. 그러나 실제로 작업을 시작하기 전에 언어가 대소 문자를 구분해야하는지 여부를 알고 싶어합니다.
한편으로는 대소 문자를 구분하지 않는 것이 더 쉬운 것처럼 보이지만 변수를 형성하는 문자 조합의 가능성이 부족할 수 있다고 걱정합니다. 예를 들어, 당신은 사용할 수 있습니다 Hello
, HEllo
, heLLo
언어는 대소 문자를 구분하는 경우 만, 다른 가능성의 무리 HELLO
)하지 않을 경우.
그러나 Tom은 세심한 사람이므로 걱정하는 것만으로는 충분하지 않습니다. 그는 숫자를 알고 싶어합니다.
도전
n
입력 값 으로 정수가 주어지면 n
대소 문자 구분없이 문자열 길이에 가능한 순열 수의 차이를 출력 (또는 리턴) 하는 함수 (또는 언어가 지원하지 않는 경우 전체 프로그램 )를 작성하십시오 .
Tom의 언어에서 변수 이름에는 모든 알파벳 문자, 밑줄 및 두 번째 문자부터 시작하는 숫자가 포함될 수 있습니다.
테스트 케이스
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;
}
채점
Tom은 골프를 좋아하므로 바이트 단위의 최단 프로그램이 이깁니다.
노트
숫자로 인해 마지막 두 테스트 케이스가 올바르지 않은 경우 괜찮습니다. 결국, 내 코드가 9 번을 올바르게 처리 했는지조차 확실하지 않습니다 .