标签:
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