티스토리 뷰

대칭수의 특징  

             두 자리 수 곱셉의 대칭수 ( 100 ~ 9801 )

             1000 이상이라고 가정하면 대칭수는 ?

              = 1000*a + 100*b + 10*b + a

              = 1001*a + 110*b

              = 7*11*13*a + 2*5*11*b

              = 11*(7*13*a + 2*5*b)


위와 같이 생각한다면 세 자리 수 곱셉의 대칭수 ( 10000 ~ 998001 ) 100000 이상이라고 가정하면 대칭수는 ?

              = 100000*a + 10000*b + 1000*c + 100*c + 10*b + a

              = 100001*a + 10010*b + 1100*c

              = 11*9091*a + 11*910*b + 11*100*c

              = 11*(9091*a + 910*b + 100*c)


앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.

두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다.

세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?


solution 1

#include <stdio.h>


int Pallresult (int num){

int Bucket[6] = {0,0,0,0,0,0};

Bucket[0] = (num/1)%10;

Bucket[1] = (num/10)%10;

Bucket[2] = (num/100)%10;

Bucket[3] = (num/1000)%10;

Bucket[4] = (num/10000)%10;

Bucket[5] = (num/100000)%10;


if(Bucket[0] == Bucket[5] && Bucket[1] == Bucket[4] && Bucket[3] == Bucket [2])

return 1;


return 0;

}


int main(void)

{

int num = 0;

int max = 0;

int i, j;


for(j = 999; j > 0; j--){

for (i = 999; i >0; i--){

num = i*j;

if(Pallresult(num) == 1 && num > max)

max = num;

}

}

printf("%d\n",max );

return 0;

}



solution 2

#include <stdio.h>


int main (void){


int number;

int a = 1;

int b = 0;

int c = 0;


int multi;

int m;


int first=0, second=0, result=0;


while(a<10){

number = 11*(a*9091 + 910*b + 100*c);

multi = 9;

while (multi++ < 90){

m = 11*multi;

if(!(number%m)){

if(number/m > 999) break;

first = m;

second = number/m;

}

}


if( ++c% 10 != 0)

if(++b % 10 != 0)

a++;


}

}


result = first + second;

printf("%d \n", result);

}


솔루션 2번은 어떤 이유로 오류가 나는지 정확히 파악을 못했다. 파악 후 제대로 된 코드 올릴 것임

'알고리즘 > 오일러 프로젝트' 카테고리의 다른 글

오일러 프로젝트 9번  (0) 2016.04.14
오일러 프로젝트 6번  (0) 2016.04.03
오일러 프로젝트 3  (0) 2016.03.22
오일러 프로젝트 2번  (0) 2016.03.13
오일러 프로젝트 1번 문제  (0) 2016.03.13
댓글