/* ID: **** LANG: C TASK: dualpal */ /*#define __DEBUG__*/ #define TRUE 1 #define FALSE 0 #define MAX 100 #includeint isDualPalindrome(int num); int checkPalindrome(int num[], int pos); int main() { int N; int S; int i; int count = 0; #ifndef __DEBUG__ FILE *fin; FILE *fout; fin = fopen("dualpal.in","r"); fout = fopen("dualpal.out","w"); fscanf(fin, "%d", &N); fscanf(fin, "%d", &S); #else printf("how many do you want to get palindromes : "); scanf("%d", &N); printf("what number do you want to palindromes that greater than? : "); scanf("%d", &S); #endif for (i = S + 1 ; ; i++) { if (isDualPalindrome(i) == TRUE) { #ifndef __DEBUG__ fprintf(fout, "%dn", i); #else printf("%dn", i); #endif count++; } if (count == N) break; } #ifndef __DEBUG__ fclose(fin); fclose(fout); #endif return 0; } int isDualPalindrome(int num) { int i; int changedNum[MAX]; int pos; int temp; int palCount = 0; for (i = 2 ; i < = 10 ; i++) { pos = 0; temp = num; do { changedNum[pos++] = temp % i; } while(temp = temp / i); if (checkPalindrome(changedNum, pos) == TRUE) { palCount++; if (palCount >= 2) { return TRUE; } } } return FALSE; } int checkPalindrome(int num[], int pos) { int i; for (i = 0 ; i < = pos / 2 ; i++) { if (num[i] != num[pos-i-1]) { return FALSE; } } return TRUE; }
주어진 수보다 큰 수 중에서 2~10진수로 표현했을때 두번 이상 palindrome(회문) 이 되는 수를 구하는 문제였다. 상당히 어렵게 생각하고 있었는데 실제로 해보니 의외로 쉽게 풀린 문제다.
'Developing' 카테고리의 다른 글
PHP에서 MySQL 다중 연결시 조심할 것 (0) | 2008.12.30 |
---|---|
USACO Training - Milking Cows (0) | 2007.11.24 |
파이썬 문자열 뒤집기 (0) | 2007.11.17 |