(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;
}

 

posted @ 2014-02-16 23:42  acutus  阅读(329)  评论(0编辑  收藏  举报
TOP