竞赛
考级
12.[NOIP2008 提高组] 火柴棒等式 难度:普及+/提高 来源:-- AC代码(C++): 没有注释,自行学习。 by:ACGO 你的点赞和关注就是我更新题解的最大动力! ------------------------------点个赞吧 ↓ !----------------------------
ጿ ኈ ቼ ዽ ጿ
#include <bits/stdc++.h> using namespace std; int a[2001] = {6}; int c[10] = {6,2,5,5,4,5,6,3,7,6}; int get_num,num1,num2; int main(void) { cin >> get_num; for (int i = 1;i <= 2000;i++) { num2 = i; while (num2 >= 1) { a[i] = a[i] + c[num2 % 10]; num2 /= 10; } } num1 = 0; for (int i = 0;i <= 1000;i++) { for (int j = 0;j <= 1000;j++) { if (get_num == a[i] + a[j] + a[i + j] + 4) { num1++; } } } cout << num1; return 0; }
法兰西玫瑰
☣☢核癌☯渴氢☢☣
题解: 因为nnn<=242424,我们马上看出来,这个等式能模拟出的最大的数字绝对不会大于100010001000,所以我们考虑表示出111-100010001000的所有数字,基于这个开始枚举,最后得出答案。 是的,有些事情就是这么巧妙,什么打表啊,枚举啊,模拟啊,都是智慧的结晶,请大家不要嗤之以鼻。 所以我们开始模拟。 先处理出的a[]a[]a[]数组保存的是当数组下标为iii的时候,需要几根火柴模拟出来。为什么aaa数组要开200020002000呢?因为后来判断的时候要a[i+j]a[i+j]a[i+j],而iii和jjj都是100010001000规模的,不开200020002000会RE。 然后我们打表处理出mmm数组,表示拼出数字,注意是数字iii的时候需要几根火柴,然后就可以按位表示了。应该很简单。 最后判断,不用多说了。 注意要加444。 所以就AC了: 欢迎加入团队
唱跳坤
**你的点赞和关注就是我更新题解的最大动力! ------------------------------点个赞吧 ↓ !----------------------------
any ing
看数据范围,很小,手算或者程序打表就可以过。 代码:
叫我杨同学
张博源
邱振凯Цю Чжэнькай
话不多说,请看题解~
远在天边的浪子
AC代码 #include <bits/stdc++.h> using namespace std; int a[2001] = {6}; int c[10] = {6,2,5,5,4,5,6,3,7,6}; int num,l,x; int main(void) { cin>>num; for(int i=1;i<=2000;i++){ x=i; while(x >= 1){ a[i]=a[i]+c[x % 10]; x/=10; } } l=0; for (int i=0;i<=1000;i++){ for (int j=0;j<=1000;j++){ if (num==a[i]+a[j]+a[i + j]+4){ l++; } } } cout<<l; return 0; } 个人做法,仅供参考,不喜勿喷
Thorns
132****3426
余承轩
#include <bits/stdc++.h> using namespace std; int number[10]={6,2,5,5,4,5,6,3,7,6}; int sum[3000]; int main() { sum[0]=6; int n,ans=0,temp,all=0; cin>>n; for(int i=1;i<=2000;i++) { temp=i; while(temp) { ans+=number[temp%10]; temp/=10; } sum[i]=ans; ans=0; } for(int i=0;i<1000;i++) { for(int j=0;j<1000;j++) { if(sum[i]+sum[j]>=n) { continue; } if(sum[i]+sum[j]+sum[i+j]+4==n) { all++; } } } cout<<all; }
挽歌
畅
xm™
#include<bits/stdc++.h> using namespace std; int main() { int n,he=0,b[1423]={6},a[10]={6,2,5,5,4,5,6,3,7,6}; cin>>n; int y; for(int i=1;i<=1422;i++) { y=i; while (y >= 1) { b[i] += a[y % 10]; y /= 10; } } for(int i=0;i<=711;i++) { for(int j=0;j<=711;j++) { if(i+j<1423&&b[i]+b[j]+b[i+j]+4==n) { he++; } } } cout<<he; }
Y神
#include <bits/stdc++.h> using namespace std; int f[2500]={6,2,5,5,4,5,6,3,7,6}; int main(){ int x,s,n,ans=0; for(int i=10;i<2500;i++) { x=i; s=0; while(x) { s+=f[x%10]; x/=10; } f[i]=s; } cin>>n; for(int a=0;a<=1111;a++) for(int b=0;b<=1111;b++) if(f[a]+f[b]+f[a+b]==n-4) ans++; cout<<ans<<endl; return 0; }
Voldemort
by QFIT
饶佳珹
#include<bits/stdc++.h> using namespace std; int a[10] = {6,2,5,5,4,5,6,3,7,6}; int ch(int x) { int sum=0; if(x == 0) return a[x]; while(x) { sum += a[x % 10]; x /= 10; } return sum; } int n,cnt; int main() { cin >> n; n -= 4; for(int i = 0;i <= 1000;i++) { for(int j = 0;j <= 1000;j++) { if(ch(i) + ch(j) + ch(i+j) == n) cnt++; } } cout << cnt << endl; return 0; }
Ethan_Si