乘法表问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 05:18:55
1.问题描述:
定义于字母表S={a,b,c}上的乘法表如下
依此乘法表,对任一定义于S上的字符串,适当加括号后得到一个表达式。例如,对于字符串x=bbbba,它的一个加括号表达式为(b(bb))(ba)。依乘法表,该表达式的值为a。试设计一个动态规划算法,对任一定义于S上的字符串x=x1x2…xn,计算有多少种不同的加括号方式,使由x 导出的加括号表达式的值为a。
2.编程任务:
对于给定的字符串x=x1x2…xn,计算有多少种不同的加括号方式,使由x 导出的加括号表达式的值为a。
3.数据输入:
由文件input.txt提供输入数据。文件的第1 行中给出一个字符串。
4.结果输出:
程序运行结束时,将计算结果输出到文件output.txt 中。文件的第1 行中的数是计算出的加括号方式数。
输入文件示例 输出文件示例
input.txt output.txt
bbbba 6
对应的乘法规则
* a b c
a b b a
b c b a
c a c c

#include<stdio.h>
#include<string.h>
int main()
{
char p[20];
int a[20][20],b[20][20],c[20][20],i,j,k,n;
while(scanf("%s",&p)!=EOF)
{
n=strlen(p);
for(i=0; i<=n-1; i++)
{
for(j=i; j<=n-1; j++)
{
a[i][j]=0;
b[i][j]=0;
c[i][j]=0;
}
}
for(i=0; i<=n-1; i++)
{
if(p[i]=='a')
{
a[i][i]=1;
}
else if(p[i]=='b')
{
b[i][i]=1;
}
else
{
c[i][i]=1;
}
}
for(i=1; i<=n-1; i++)
{
for(j=0; j<=n-i-1; j++)
{