一个将26个字母用数字编码的题,问你有多少可能性
从右往左扫描,用一个数组记录每一位有多少种可能,递推公式是
if '0'==a[i] :
a[i]=0
elseif '1'==a[i]||('2'==a[i]&&'7'>a[i-1]) :
a[i]=a[i-1]+a[i-2]
else
a[i]=a[i-1]
注意的要点就是0的情况,因为0无法单独存在,必须依赖他的左边一位数,所以0情况下的个数应该合并到左边,所以0时设0
#include <stdio.h> int main(void) { char data[10000]; int temp[10000]; int i=0; while(scanf("%s",data)&&!('0'==data[0]&&0==data[1])) { for(i=0;0!=data[i];++i); temp[i]=1; if('0'==data[i-1]) { temp[i-1]=0; } else { temp[i-1]=1; } for(i-=2;i>=0;--i) { if('0'==data[i]) { temp[i]=0; } else { temp[i]=temp[i+1]; if('1'==data[i]||'2'==data[i]&&'7'>data[i+1]) { temp[i]+=temp[i+2]; } } } printf("%d\n",temp[0]); } }