首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

poj 上的1008题 想了好几天了,老是不接受

2013-07-01 
poj上的1008题 想了好几天了,总是不接受#includestdio.h#includestring.htypedef struct years{int da

poj 上的1008题 想了好几天了,总是不接受
#include<stdio.h>
#include<string.h>
typedef struct years
{
    int day;
    char month[10];
    int year;
}YEAR;

int main()
{
    int day_input,number_count,index1,index2,year_input,days;
    char months[156];
        char holly[20][10]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk",
        "ok","chuen","eb","ben","ix","mem","cib","canban","eanab","canac","ahau"};
    char haab[19][10]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol",
        "chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"    };
    YEAR calendar1[10];

    scanf("%d",&number_count);

for (index1=0;index1<number_count;index1++)
    {
        scanf("%d.%s%d",&day_input,months,&year_input);
        for (index2=0;index2<19;index2++)
        {
            if (strcmp(months,haab[index2]))
            {
                continue;
            }
            else 
            {
                break;
            }
        }
        days=day_input+20*index2+365*year_input;
        calendar1[index1].day=days%13+1;
        calendar1[index1].year=days/260;
        strcpy(calendar1[index1].month,holly[days%20]);

}
    printf("%d\n",number_count);
    for (index1=0;index1<number_count;index1++)
    {
        printf("%d %s %d\n", calendar1[index1].day,calendar1[index1].month,calendar1[index1].year);
    }

return 0;
}


[解决办法]
scanf("%d.%s%d",&day_input,months,&year_input);
%s应该是以回车结尾。
[解决办法]
http://kimnote.com/2008/06/541/
[解决办法]
这种ACM的问题, 你来这里问,基本是不会有结果的。 要学习自己测试算法。  比如写一些随机数生成器,生产数据测试你的程序。 看看那些数据是不符合的。再通过调试,改正。 一般都能AC。
------解决方案--------------------


1. holly中有2个月份名称错了(其实可从题中复制以免抄错。
2. YEAR calendar1[10]只允许有10组输入,超过即Runtime Error。应每次处理输入,然后输出,不必用数组。

以下修改供参考:

#include<stdio.h>
#include<string.h>
typedef struct years
{
    int day;
    char month[10];
    int year;
}YEAR;

int main()
{
    int day_input,number_count,index1,index2,year_input,days;

    char months[156];
    char holly[20][10]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk",
        "ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};//"ok","chuen","eb","ben","ix","mem","cib","canban","eanab","canac","ahau"};
    char haab[19][10]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol",
        "chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"    };
    YEAR calendar1;//YEAR calendar1[10];

    scanf("%d",&number_count);
    printf("%d\n",number_count);

    for (index1=0;index1<number_count;index1++)
    {
        scanf("%d.%s %d",&day_input,months,&year_input);//scanf("%d.%s%d",&day_input,months,&year_input);
        for (index2=0;index2<19;index2++)
        {
            if (strcmp(months,haab[index2]))
            {
                continue;
            }
            else 
            {
                break;
            }
        }
        days=day_input+20*index2+365*year_input;
        calendar1.day=days%13+1;//calendar1[index1].day=days%13+1;
        calendar1.year=days/260;//calendar1[index1].year=days/260;
        strcpy(calendar1.month,holly[days%20]);//strcpy(calendar1[index1].month,holly[days%20]);
        printf("%d %s %d\n", calendar1.day,calendar1.month,calendar1.year);
    }
    /*
    printf("%d\n",number_count);
    for (index1=0;index1<number_count;index1++)
    {
        printf("%d %s %d\n", calendar1[index1].day,calendar1[index1].month,calendar1[index1].year);
    }*/

return 0;
}

[解决办法]
你好像有些单词写错了。。例如caban你写成了canban。。你再仔细检查一下吧。。
[解决办法]
这题没什么难度啊?

Haab 到 天数 到 Tzolkin
天数到Tzolkin很简单,不用多说了。
Haab 到天数也不难,因为每年天数固定,前18个月天数相同,比公历的计算还容易。唯一一个关键就是月份单词到月份数值的转换,精心为这19个月设计一个无冲突的hash key算法吧。

热点排行