开了一个全局数组用来存储,程序出了问题。
火柴棒等式。给你n根火柴棍,你可以拼出多少个形如A+B=C的等式(当A不等于B时,A+B=C和B+A=C算两种情况)?其中A,B,C都是用火柴棍拼出的整数,加号和等号各消耗2个火柴棍,0-9每个数字消耗的火柴棍在程序里的数组number里写出来了。
以下代码里,函数f用来计算拼出数字x所需要的火柴棒数,我开了一个dp数组用来存储已经计算过的的数字情况,但是这样无法得到正确答案。如果
不用dp数组,每次的数字都重新计算的话,就没有问题。请问一下这是怎么回事?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int dp[1120],number[10]={6,2,5,5,4,5,6,3,7,6};
int f(int x){
int sum=0;
if(dp[x]) return dp[x];
while((x/10)!=0){
sum+=number[x%10];
x=x/10;
}
sum+=number[x];
dp[x]=sum;
return dp[x];
}
int main(void){
int n,m,i,j,c,k=0;
scanf("%d",&n);
m=n-4;
memset(dp,0,sizeof(dp));
for(i=0;i<=1111;i++){
for(j=0;j<=1111;j++){
c=i+j;
if(f(i)+f(j)+f(c)==m) k++;
}
}
printf("%d\n",k);
return 0;
}
样例:
输入14的时候,输出为2。
输入18的时候,输出为9。