최현우의 마술 eBook(그녀 마음 훔치기 10분 전 (마술 편)) 을 우연히 구매하게 되어서 보던 중에 트릭 중에 한 가지가 숫자에 관한 트릭이 있길래 코드로 증명(??) 해봄
2013년 1월 18일 5:44 오후
// 시나리오 : 숫자 마술(트릭) => 항상 결과는 1089
// 1. 백단위의 세자리 숫자를 생각한다
// 2. 원래 세자리 숫자(x)와 거꾸로 한 숫자(xr) 중에서 큰 값에서 작은값을 뺀다 => y
// 3. 결과값(y)과 결과값을 거꾸로 한 숫자(yr)를 서로 더한다.
// 아래 소스에서 r 이 붙은 변수명은 순서가 뒤집혀진 숫자임.
// 임의 3자리 수를 정한다.
int x1 = 8; // 첫째자리
int x2 = 9; // 두째자리
int x3 = 0; // 셋째자리
// 자리수 별로 나누어서 절대값을 구한다
int x = (x1 * 100) + (x2 * 10) + (x3 * 1); // 처음 생각한 3자리 숫자
int xr = (x3 * 100) + (x2 * 10) + (x1 * 1); // 뒤집은 수
int y = Math.Abs(x – xr); // 차이
// 절대값을 구하는 또 다른 방법
y = (x1 * 99) + (x2 * 0) – (x3 * 99); // 차이1
y = (x3 * 99) + (x2 * 0) – (x1 * 99); // 차이2
y = Math.Abs(x1 – x3) * 99; // 첫째자리와 셋째자리의 차이의 99 배
// 절대값인 또다른 변수 n 을 정의한다
int n = Math.Abs(x1 – x3);
y = n * 99;
y = (n * 100) – n;
y = ((n – 1) * 100) + (9 * 10) + ((10 – n) * 1); // n백이라는 숫자에서 n 를 빼면 (n 는 한자리의 수이므로) => 백의 자리는 n-1, 십의 자리는 9, 일의 자리는 10-n ( 여기가 가장 중요 포인트 )
int yr = ((10 – n) * 100) + (9 * 10) + ((n – 1) * 1);
int z = y + yr;
z = ((n – 1 + 10 – n) * 100) + (9 * 20) + ((10 – n + n – 1) * 1);
z = (9 * 100) + (180) + (9 * 1);
z = 1089;
0 Comments