zoj2202Alphacode一直wa,求解答

enjoyinwind 2011-03-21 02:58:20

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1202

我采用的是动态规划方法,提交后就wa,郁闷,求高手

#include<stdio.h>
#include<string.h>
#include<memory.h>

char ch[502];
int dp[502];//dp[i]表示ch[0]到ch[i]有多少种不同编码方式

int main()
{
int i=0,len;
//freopen("in.txt","r",stdin);
while(scanf("%s",ch)!=EOF)
{
if(ch[0]=='0')
break;
memset(dp,0,sizeof(dp));
dp[0]=1;
len=strlen(ch);
if(ch[0]=='1' && ch[1]>'0')
dp[1]=2;
else if(ch[0]=='2' && ch[1]>'0' && ch[1]<='6')
dp[1]=2;
else
dp[1]=1;
for(i=2;i<len;i++)
{
if(ch[i]=='0' && ch[i-1]=='1')
dp[i]=dp[i-2];
else if(ch[i]=='0' && ch[i-1]=='2')
dp[i]=dp[i-2];
else if(ch[i-1]=='1')
dp[i]=dp[i-1]+dp[i-2];
else if(ch[i-1]=='2' && ch[i]>'0' && ch[i]<='6')
dp[i]=dp[i-1]+dp[i-2];
else
dp[i]=dp[i-1];
}
printf("%d\n",dp[len-1]);
}
//fclose(stdin);
return 0;
}
...全文
151 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
enjoyinwind 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 logiciel 的回复:]
引用 6 楼 enjoyinwind 的回复:
引用 5 楼 logiciel 的回复:
对输入130,140,应输出1.


在网上找的,ZOJ2202 Alphacode:规律是很好找的。但是被阴的地方是除了第一字符不为0,其他字符可为0。这就意味着,如102302,只能算1种,相当于0起到空格的作用。可以解释下吗,如1110000算几种,谢谢


我其实对这个问题也不是很理解……
[/Quote]

哦,没事,不过还是谢谢!
logiciel 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 enjoyinwind 的回复:]
引用 5 楼 logiciel 的回复:
对输入130,140,应输出1.


在网上找的,ZOJ2202 Alphacode:规律是很好找的。但是被阴的地方是除了第一字符不为0,其他字符可为0。这就意味着,如102302,只能算1种,相当于0起到空格的作用。可以解释下吗,如1110000算几种,谢谢
[/Quote]

我其实对这个问题也不是很理解,抱歉!
enjoyinwind 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 logiciel 的回复:]
对输入130,140,应输出1.
[/Quote]

在网上找的,ZOJ2202 Alphacode:规律是很好找的。但是被阴的地方是除了第一字符不为0,其他字符可为0。这就意味着,如102302,只能算1种,相当于0起到空格的作用。可以解释下吗,如1110000算几种,谢谢
logiciel 2011-03-23
  • 打赏
  • 举报
回复
对输入130,140,应输出1.
enjoyinwind 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 logiciel 的回复:]
此题关键是对0的处理。设输入是:
110
120
130
140

LZ程序对前2种输出1,但对后2种输出2.
[/Quote]

感谢回答,出现130,140这种输入的话,是应该输出0还是?
下面是我改成针对这种情况输出0修改的代码,可还是不能ac,望赐教
#include<stdio.h>
#include<string.h>
#include<memory.h>

char ch[502];
int dp[502];//dp[i]表示ch[0]到ch[i]有多少种不同编码方式

int main()
{
int i=0,len;
//freopen("in.txt","r",stdin);
while(scanf("%s",ch)!=EOF)
{
if(ch[0]=='0')
break;
memset(dp,0,sizeof(dp));
dp[0]=1;
len=strlen(ch);
if(ch[0]=='1' && ch[1]>'0')
dp[1]=2;
else if(ch[0]=='2' && ch[1]>'0' && ch[1]<='6')
dp[1]=2;
else
dp[1]=1;
for(i=2;i<len;i++)
{
if(ch[i]=='0' && ch[i-1]=='1' || ch[i]=='0' && ch[i-1]=='2')
dp[i]=dp[i-2];
else if(ch[i]=='0' && ch[i-1]>'2')//对130,140输入让输出结果为0
{
dp[len-1]=0;
break;
}
else if(ch[i-1]=='1')
dp[i]=dp[i-1]+dp[i-2];
else if(ch[i-1]=='2' && ch[i]>'0' && ch[i]<='6')
dp[i]=dp[i-1]+dp[i-2];
else
dp[i]=dp[i-1];
}
printf("%d\n",dp[len-1]);
}
//fclose(stdin);
return 0;
}
enjoyinwind 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zjs100901 的回复:]
楼主好强。
我只看出如果输入0,程序不能输出1直接退出,这点算是问题吗?
[/Quote]

题目的意思就是在输入0时退出不输出,再说0是没有编码方案的!不过还是谢谢回答
logiciel 2011-03-21
  • 打赏
  • 举报
回复
此题关键是对0的处理。设输入是:
110
120
130
140

LZ程序对前2种输出1,但对后2种输出2.
zjs100901 2011-03-21
  • 打赏
  • 举报
回复
楼主好强。
我只看出如果输入0,程序不能输出1直接退出,这点算是问题吗?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧