要注意S雖然有範圍,
但主要是求出N的個數,
個數有可能超過S的範圍。
/* ID: mythnc2 LANG: C TASK: dualpal Dual Palindromes 2011/11/14 20:30:40 */ #include <stdio.h> #include <string.h> #define MAXCHAR 15 #define TRUE 1 #define FALSE 0 void conversion(int, int, char *); int pal(char *); int main (void) { FILE *fin, *fout; int n, s, i, j, count; char t[MAXCHAR]; fin = fopen("dualpal.in", "r"); fout = fopen("dualpal.out", "w"); fscanf(fin, "%d %d", &n, &s); for (i = s + 1; n; i++) for (count = 0, j = 2; j < 11; j++) { conversion(j, i, t); if (pal(t)) count++; if (count > 1) { fprintf(fout, "%d\n", i); n--; break; } } return 0; } /* conversion: conver n in base of b, * save in t */ void conversion(int b, int n, char *t) { int i, mod; char map[] = "0123456789"; for (i = 0; n; i++) { t[i] = map[n % b]; n /= b; } t[i] = '\0'; } /* pal: if t is palindrome return TRUE, * else return FALSE */ int pal(char *t) { int i, j; for (i = 0, j = strlen(t) - 1; i < j; i++, j--) if (t[i] != t[j]) return FALSE; return TRUE; }
沒有留言:
張貼留言