刚开始在想一个减去火柴数的优先顺序,想的挺麻烦的,这种实际的情况就是应该多写几个找规律就好,我还是想的太麻烦了!
2~7搭出的最小数分别是,1,7,4,2,0,8
火柴数 | 搭出的数字 |
8 | 10 |
9 | 18 |
10 | 22 |
11 | 20 |
12 | 28 |
13 | 68 |
14 | 88 |
火柴数 | 搭出的数字 |
15 | 108 |
16 | 188 |
17 | 200 |
18 | 208 |
19 | 288 |
20 | 688 |
21 | 888 |
火柴数 | 搭出的数字 |
22 | 1088 |
23 | 1888 |
24 | 2008 |
25 | 2088 |
26 | 2888 |
27 | 6888 |
28 | 8888 |
找到规律:22~28 就是在15~21的基础上每个后面+8
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n,i,x,y;
int a[] = {0,0,1,7,4,2,0,8,10,18,22,20,28,68,88,108,188,200,208,288,688,888};
while(cin>>n)
{
if(n<= 21)
cout<<a[n]<<endl;
else
{
x = (n - 14) % 7;
y = (n - 14) / 7;
cout<<a[x + 14];
while(y--)
{
cout<<8;
}
cout<<endl;
}
}
return 0;
}