来两道题
1.找出1~10000中即是回文数又是素数的数2.1-9这9个数如果满足xx*xx=xx*xxx则输出,九个数不得重复
#include <stdio.h> #include <string.h> #include <stdlib.h> int cmp(const void * p1, const void * p2) { return *(int *)p1 - *(int *)p2; } int isRepeat(int * array, int size) { int i; qsort(array, size, sizeof(int), cmp); for(i = size - 1; i > 0; i--) if(array[i] - array[i - 1] != 1) return 1; return 0; } int main(void) { int i[9], tmp[9]; for(i[0] = 1; i[0] < 10; i[0]++) for(i[1] = 1; i[1] < 10; i[1]++) for(i[2] = 1; i[2] < 10; i[2]++) for(i[3] = 1; i[3] < 10; i[3]++) for(i[4] = 1; i[4] < 10; i[4]++) for(i[5] = 1; i[5] < 10; i[5]++) for(i[6] = 1; i[6] < 10; i[6]++) for(i[7] = 1; i[7] < 10; i[7]++) for(i[8] = 1; i[8] < 10; i[8]++) if((i[0] * 10 + i[1]) * (i[2] * 10 + i[3]) == (i[4] * 10 + i[5]) * (i[6] * 100 + i[7] * 10 + i[8]) && !isRepeat((int *)memcpy(tmp, i, sizeof(i)), 9)) printf("%d%d * %d%d = %d%d * %d%d%d\n", i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8]); return 0; }
#include <stdio.h> #define swap(e1, e2, tmp) (tmp) = (e1); (e1) = (e2); (e2) = (tmp) void perm(int *, int, int); int main(void) { int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; perm(numbers, 0, 9); return 0; } void perm(int * array, int begin, int end) { int i, tmp; if(begin == end - 1) { if((array[0] * 10 + array[1]) * (array[2] * 10 + array[3]) == (array[4] * 10 + array[5]) * (array[6] * 100 + array[7] * 10 + array[8])) printf("%d%d * %d%d = %d%d * %d%d%d\n", array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7], array[8]); } else { for(i = begin; i < end; i++) { swap(array[begin], array[i], tmp); perm(array, begin + 1, end); swap(array[begin], array[i], tmp); } } }