| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 926 人关注过本帖
标题:开了一个全局数组用来存储,程序出了问题。
只看楼主 加入收藏
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
收藏
已结贴  问题点数:20 回复次数:4 
开了一个全局数组用来存储,程序出了问题。
火柴棒等式。
给你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。   
搜索更多相关主题的帖子: 数组 数字 number int sum 
2018-06-19 23:57
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:20 
    while((x/10)!=0){
        sum+=number[x%10];
        x=x/10;
    }

修改了x
后面的 dp[x] 不是你预期的位置

https://zh.
2018-06-20 00:23
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
谢谢大佬,我改了一下程序,函数最开始用x0把x的值存起来,最后把sum赋给dp[x0],可是答案还是不对。

#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 x0,sum=0;
    x0=x;
    if(dp[x0]) return dp[x0];
    while((x/10)!=0){
        sum+=number[x%10];
        x=x/10;
    }
    sum+=number[x];
    dp[x0]=sum;
    return dp[x0];
}

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;
}
   
2018-06-20 11:15
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
i 最大 1111
j 最大 1111
i+j 最大 2222
f(2222)
你就越界了

https://zh.
2018-06-20 11:35
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 4楼 lin5161678
好了,谢谢大佬
2018-06-20 11:55
快速回复:开了一个全局数组用来存储,程序出了问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024751 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved