发布时间:2025-12-09 12:03:30 浏览次数:1
不知道为什么错了的搜索。。。
#include<bits/stdc++.h>using namespace std;const int a[]={6,2,5,5,4,5,6,3,7,6};int ans,n,e[2002];void dfs(int sum,int x,int val,int bef,int he,int op,int sit){ //cout<<sum<<" "<<x<<" "<<val<<" "<<he<<" "<<op<<endl; for(int i=0;i<10;i++) if(a[i]<=sum-x) dfs(sum,x+a[i],val*10+i,bef,he,op,sit); if(x-sum==0) { if(op==1) for(int i=sum+2;i<=n-2;i++) dfs(i,x,0,bef,val,2,sit); if(op==2) {if(bef==val) dfs(n,x,0,bef,he+val,3,1); else dfs(n,x,0,bef,he+val,3,0);} if(op==3) if(he==val) { if(sit==1) e[bef]=1; else ans++; } }} int main(){ scanf("%d",&n); n-=4; for(int i=2;i<=n-4;i++) dfs(i,0,0,0,0,1,0); for(int i=0;i<=2001;i++) if(e[i]) ans++; cout<<ans<<endl; return 0;}正解(很巧妙,没想到,copy自洛谷第一篇题解)
#include<stdio.h>int main(){ int a[2001]={6},b,c[10]={6,2,5,5,4,5,6,3,7,6},s=0,i,j; scanf("%d",&b); for(i=1;i<=2000;i++) { j=i; while(j>=1)//求每个数所用的火柴棒 { a[i]=a[i]+c[j%10]; j=j/10; } } for(i=0;i<=1000;i++) { for(j=0;j<=1000;j++) if(a[i]+a[j]+a[i+j]+4==b)s++;//还有加号与等号 } printf("%d",s); return 0;}