比赛 20111111 评测结果 EEEEEEEEEE
题目名称 吉祥数 最终得分 100
用户昵称 fanzeyi 运行时间 0.000 s
代码语言 C 内存使用 0.00 MiB
提交时间 2011-11-11 10:00:48
显示代码纯文本
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000

typedef struct {
    int num;
    int now;
    int chuju;
} Num;

int n;
int p;
int result[MAX];
Num num[MAX];

int mypow(int a, int b) {
    int ans = 1;
    int i;
    for(i = 0; i < b; i++) {
        ans = ans * a;
    }
    return ans;
}

int NewNum(int a, int times) {
    int bai = a / 100;
    int shi = a % 100 / 10;
    int ge = a % 10;
    return mypow(bai, times) + mypow(shi, times) + mypow(ge, times);
}

int Check(int a) {
    int i;
    for(i = 0; i < p; i++) {
        if(num[i].chuju != 2 && a == num[i].now){
            return 1;
        }
    }
    return 0;
}

int cmp(const void *a, const void *b) {
    return *(int*)a - *(int*)b;
}

int main(int argc, char const *argv[]) {
    FILE *fin = fopen("ghillie.in", "r");
    FILE *fout = fopen("ghillie.out", "w");
    int i, j;
    int a = 0;
    p = 0;
    memset(num, 0, sizeof(num));
    fscanf(fin, "%d", &n);
    while(fscanf(fin, "%d", &num[p].num) != -1) {
        num[p].now = num[p].num;
        p = p + 1;
    }
    for(i = 0; i < n; i++) {
        for(j = 0; j < p; j++) {
            if(num[j].chuju != 2) {
                num[j].now = NewNum(num[j].num, i + 2);
            }
        } // 计算新数字
        for(j = 0; j < p; j++) {
            if(num[j].chuju != 2) {
                if(Check(num[j].num)) {
                    num[j].chuju = 1;
                }
            }
        }// 检查出局的
        for(j = 0; j < p; j++) {
            if(num[j].chuju == 1) {
                num[j].chuju = 2;
            }
        }
    }
    a = 0;
    for(i = 0; i < p; i++) {
        if(num[i].chuju != 2) {
            result[a++] = num[i].num;
        }
    }
    qsort(result, a, sizeof(result[0]), cmp);
    for(i = 0; i < a; i++) {
        fprintf(fout, "%d ", result[i]);
    }
    return 0;
}