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 火柴棒等式的主要内容,如果未能解决你的问题,请参考以下文章