P1149 火柴棒等式

Posted xiaoyezi-wink

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1149 火柴棒等式相关的知识,希望对你有一定的参考价值。

P1149 火柴棒等式

 

本来想着打表来,然后发现自己算不出来,AC代码造福一下人类,代码帮你表 nice

 

0~12 13 14 15 16 17 18 19 20 21 22 23 24
0 1 2 8 9 6 9 29 39 38 65 88 128

 

还好我没有打表QWQ

 

说一下正解吧

 

首先存一下摆每个0~9数字需要多少根棍(拿走不客气)

a [ i ] 表示摆出数字 i 需要多少根火柴

0 1 2 3 4 5 6 7 8 9
6 2 5 5 4 5 6 3 7 6

Ps:

   你可以要求电脑继续帮你算,因为摆一个数字,火柴棒数不可能为0,所以摆出这个数字所需火柴棒数就等于摆出它各位数字和十位数字火柴棒数之和

   即 技术图片

 

 

然后for循环枚举

(1)两层for循环枚举   i   j 不相等的情况

(2)一层for循环枚举   i   j 相等的情况

 

 f [ i ] 表示用 i 根火柴 可以摆出多少个式子

每次枚举一个式子,对应的

技术图片

不要忘了运算符号

 

 

 

 提醒

for循环啊,i  j 我大概枚举到了1000  ,为了AC多枚举没关系,QWQ

 

 

 

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>

using namespace std;

int n,cnt;
int a[10000]=6,2,5,5,4,5,
              6,3,7,6,8
              ,f[100000];
            
int main()

    scanf("%d",&n);
    
    for(int i=0;i<=1000;i++)
      for(int j=0;j<=1000;j++)
      
          if(a[i]==0) a[i]=a[i/10]+a[i%10];
          if(a[j]==0) a[j]=a[j/10]+a[j%10];
          
        if(i!=j)
        
            if((i+j)>10&&a[i+j]==0)
            a[i+j]=a[(i+j)/10]+a[(i+j)%10];
            
            f[a[i]+a[j]+a[i+j]+4]++;
         
         
      
    for(int i=0;i<=1000;i++)
    
        if(a[i]==0) a[i]=a[i/10]+a[i%10];
        
        if((i*2)>10&&a[i*2]==0)
          a[i*2]=a[(i*2)/10]+a[(i*2)%10];
        f[a[i]*2+a[i*2]+4]++;
    

    for(int i=0;i<=24;i++)
    printf("%d\\n",f[i]);

    return 0;    
    

 

以上是关于P1149 火柴棒等式的主要内容,如果未能解决你的问题,请参考以下文章

P1149 火柴棒等式

P1149 火柴棒等式

P1149 火柴棒等式

P1149 火柴棒等式

P1149 火柴棒等式(打表)

luogu P1149 火柴棒等式