卖花声张舜民注释:程序设计题,求助!(用C/C++/Pascal)

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 01:11:35
密码问题
有人试图构造一种简单的密码算法,就是把英文字母A,B,C,...Y,Z对应于数字1,2,3,...25,26。比如单词"BEAN"代表的数字串为25114。但是,他发现这种算法不能实现目的,因为当别人得到数字串25114后,把这个数字串划分为字母的时候,可以出现多种划分方法。
请编写一个程序。
要求:
1。对于用户输入的一个数字串,请计算出所有可能划分(不必考虑字母组合的语义)的种数。
2。程序的执行效率要尽可能地高,不能超过1秒!!!

比如:
输入25114,输出6
输入1111111111,输出89
输入3333333333,输出1

#include<stdio.h>

int fun(int );

void main()
{
char a[80];
int i, k, l = 1;

printf("Please input the number:\t");
scanf("%s", a);

for(i = 0, k = 1; a[i] != '\0'; i++)
{
while((a[i] == 49 || a[i] == 50) && a[i] != '\0'){k++; i++;}
if(a[i] == '\0') {l *= fun(k-1); break;}
if(a[i] < 55)l *= fun(k);
if(a[i] >= 55){
if(a[i-1] == 50) l *= fun(k-1);
else l *= fun(k);
}
k = 1;
}
printf("%d\n", l);
}

int fun(int k)
{
if(k == 1)return 1;
if(k == 2)return 2;
return fun(k-1) + fun(k-2);
}
对算法有疑惑的地方,可以加群:7393983

顶下