标签:
Time Limit: 1 secs, Memory Limit: 32 MB
Alice and Bob need to send secret messages to each other and are discussing ways to encode theirmessages: Alice: "Let‘s just use a very simple code: We‘ll assign `A‘ the code word 1, `B‘ will be 2, and so on down to `Z‘ being assigned 26." Bob: "That‘s a stupid code, Alice. Suppose I send you the word `BEAN‘ encoded as 25114. You could decode that in many different ways!" Alice: "Sure you could, but what words would you get? Other than `BEAN‘, you‘d get `BEAAD‘, `YAAD‘, `YAN‘, `YKD‘ and `BEKD‘. I think you would be able to figure out the correct decoding. And why would you send me the word `BEAN‘ anyway?" Bob: "OK, maybe that‘s a bad example, but I bet you that if you got a string of length 500 there would be tons of different decodings and with that many you would find at least two different ones that would make sense." Alice: "How many different decodings?" Bob: "Jillions!"For some reason, Alice is still unconvinced by Bob‘s argument, so she requires a program that willdetermine how many decodings there can be for a given string using her code.
Input will consist of multiple input sets. Each set will consist of a single line of digits representing avalid encryption (for example, no line will begin with a 0). There will be no spaces between the digits.An input line of `0‘ will terminate the input and should not be processed
For each input set, output the number of possible decodings for the input string. All answers will bewithin the range of a long variable.
25114 1111111111 3333333333 0
6 89 1
#include<iostream>
#include<cstring>
using namespace std;
bool is_letter(char begin,char end)
{
if(begin>='3') return false;
else if(begin=='2')
{
// cout<<"end"<<end<<endl;
if(end<='6');
return true;
return false;
}
else if(begin=='0') return false;
else return true;
}
int main()
{
char num[10000];
long long n_way[10000];
while(cin>>num)
{
if(num[0]=='0') break;
memset(n_way,0,sizeof(n_way));
n_way[0]=1;
if(is_letter(num[0],num[1])==1&&num[1]!='0') n_way[1]=2;
else
{
n_way[1]=1;
}
for(int i=2;i<strlen(num);i++)
{
if(num[i]=='0') n_way[i]=n_way[i-2];
else if(is_letter(num[i-1],num[i])==0) n_way[i]=n_way[i-1];
else n_way[i]=n_way[i-1]+n_way[i-2];
}
/* for(int i=0;i<strlen(num);i++)
{
cout<<n_way[i]<<endl;
}*/
cout<<n_way[strlen(num)-1]<<endl;
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/classmonster/article/details/51346164