c++练习267题 火柴棒等式

*267题

原题传送门:http://oj.tfls.net/p/267

题解:

#include<bits/stdc++.h>
using namespace std;
int c,m;
int ans[30];
int sz[1005] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6, 8, };
// 这里对应 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, };
int main(){
  cin>>m;
  for (int i=11; i<=1000; i++){
    sz[i]=sz[i/10]+sz[i%10];
  }//这里通过前面的1-10来计算后面的11-1001
  for (int i=0; i<1000; i++){//第一个加数 
    for (int j=0; j<1000-i; j++){//第二个加数 
      c=i+j;
      ans[sz[i]+sz[j]+sz[c]+4]++;
    }
  }
  cout<<ans[m];
  return 0;
}

方法:我用的是两个数相加得第三个数,总共的火柴根数记录在数组里,每一个可能都计算一遍,需要哪一个直接调用

虽然数据比较全,但速度慢了很多

 

说明:这里我原本以为是三个一位数,就用了0-9来存取,和不大于9

后来一直爆零,就用原样输出看看数据和答案

#include<bits/stdc++.h>
using namespace std;
int main(){
int m;
cin>>m;
cout<<m;
return 0;
}

 

发现m=24时有高达128个答案,而两个一位数只有100种可能

于是我聪明的大脑立刻明白肯定不是一位数。

这里我原样输出,把它输入的原样输出,所以“读取到”的是输入,“应为”是正确答案,也算是取巧了吧,不过我保证没有按照答案写程序

 

然后我开始算更大的范围,从一位数扩展到两位数,再到四位数,在最大范围1005时满分通过

这个题还是很离谱的,要不是我范围够大,谁能想到m=24时,加数居然到了711!

 

 

这个是m=24的后边的一些结果,可以看到,范围真的离谱

 

第一次写博客,留个纪念

 

posted @ 2022-12-03 23:39  TC2105LJY  阅读(164)  评论(0编辑  收藏  举报