码迷,mamicode.com
首页 > 其他好文 > 详细

P1149 火柴棒等式

时间:2019-06-02 21:49:54      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:没有   情况   bsp   不可   https   main   str   image   ++   

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 火柴棒等式

标签:没有   情况   bsp   不可   https   main   str   image   ++   

原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10964488.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!