(Problem 62)Cubic permutations(待续)
The cube, 41063625 (3453), can be permuted to produce two other cubes: 56623104 (3843) and 66430125 (4053). In fact, 41063625 is the smallest cube which has exactly three permutations of its digits which are also cube.
Find the smallest cube for which exactly five permutations of its digits are cube.
题目大意:
立方数 41063625 (3453) 通过排列可以得到两个另外的立方数: 56623104 (3843) 和 66430125 (4053)。 实际上41063625是最小的三个(不多不少)排列是立方数的立方数。
找出最小的立方数,其五个(不多不少)排列是立方数。
#include<stdio.h> #include<stdbool.h> #include<string.h> #include<math.h> #include<stdlib.h> #define N 8000 typedef struct data { long long n; char na[22]; }; struct data a[N]; int cmp1(const void * a, const void * b) { struct data * c = (struct data * )a; struct data * d = (struct data * )b; return strcmp(c ->na, d ->na); } int cmp2(const void * a, const void * b) { return *(char *)a - *(char *)b; } void solve() { int i, j; long long t, min; min = 10000000000000000000; for(i = 0, j = 333; i < N; i++, j++) { a[i].n = j * j * j; sprintf(a[i].na, "%lld", a[i].n); qsort(a[i].na, strlen(a[i].na), sizeof(char), cmp2); } qsort(a, N, sizeof(a[0]), cmp1); for(int i = 0; i < N; i++) { if(strcmp(a[i].na, a[i + 1].na) == 0 && strcmp(a[i].na, a[i + 2].na) == 0 && strcmp(a[i].na, a[i + 3].na) == 0 && strcmp(a[i].na, a[i + 4].na) == 0 ) { printf("%lld\n%lld\n%lld\n%lld\n%lld\n", a[i].n, a[i + 1].n, a[i + 2].n, a[i + 3].n, a[i + 4].n); } } //printf("%lld\n", min); } int main() { solve(); return 0; }
作者:acutus
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.