POJ 1008

/*
 * poj_1008.c
 * accepted
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HABB_MONTHS (19)
#define HABB_M_DAYS (20)
#define HABB_19M_DAYS (5)
#define HABB_DAYS (365)
#define TZOLKIN_DAY_NAMES (20)
#define TZOLKIN_PERIODS (13)
#define TZOLKIN_DAYS (260)

static void poj_1008 ();

int main (int argc, char * argv[]){
    poj_1008 ();
    return 0;
}

static void poj_1008 (){
    int i, j, lines;
    int days, in_day, in_month, in_year, out_year;
    char in_no_of_day[4], in_name_of_month[8], out_line_str[20];
    char * out_str, * p;
    char habb_months[][8] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu", "uayet"};
    char tzolkin_day_names[][9] = {"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"};
    scanf ("%d", &lines);

    out_str = (char *)malloc (sizeof(char) * 20 * lines + 20); // each line does not exceed 20 characters.
    sprintf (out_line_str, "%d\n", lines);
    strcpy (out_str, out_line_str);

    for (i=0; i<lines; i++){
        scanf ("%s%s%d", in_no_of_day, in_name_of_month, &in_year);
        for (p=in_no_of_day; '.'!= (*p); p++){
            ;
        }
        *p = '\0';
        in_day = atoi (in_no_of_day);

        for (j=0; j<HABB_MONTHS; j++){
            if (!strcmp (habb_months[j], in_name_of_month)){
                in_month = j;
                break;
            }
        }

        days = (in_year * HABB_DAYS) + (in_month * HABB_M_DAYS) + (in_day);
        out_year = days / TZOLKIN_DAYS;
        days = days - out_year * TZOLKIN_DAYS;
        sprintf (out_line_str, "%d %s %d\n", (days % TZOLKIN_PERIODS + 1), tzolkin_day_names[days % TZOLKIN_DAY_NAMES], out_year);
        strcat (out_str, out_line_str);
    }

    fprintf (stdout, "%s", out_str);

    if (out_str){
        free (out_str);
    }
}

参考了http://www.slyar.com/blog/poj-1008-c.html,觉得别人写的scanf还是比较好,另外,我的输出都整合到了一起,从别人的程序对比可以看出,对于这种有输入规模限制的题目,其实POJ的检测是等到所有输入都已经结束之后再校验结果的。

该题是一开始就输入问题规模,有些则是输入某一组特殊的符号作为输出结束符,某些题目则是没有结束符,循环等待可能的输入。由此看来,不比多考虑是不是需要一齐输出还是分开输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值