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算法吧。