来两道题
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);
}
}
}
