蓝桥杯-带分数

来源:互联网 发布:golang syscall详解 编辑:程序博客网 时间:2024/05/05 00:41

一道搜索题,先爆出所有1-9的所有排列,然后依次枚举就行了~

注意一个地方的剪枝

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=1e6+1000;char num[maxn][11];int cnt=0,n;bool vis[11];void Init(int index){    if(index==9)    {num[cnt++][9]='\0';strcpy(num[cnt],num[cnt-1]);return;    }    for(int i=1;i<10;i++)if(!vis[i]){    num[cnt][index]=i+'0';    vis[i]=1;    Init(index+1);    vis[i]=0;}}int Is(int index,int val){    int a=0,b,c,ans=0;    for(int i=0;i<9;i++)    {a=a*10+num[index][i]-'0';b=0;int j=i+1;for(;j<((8-i)>>1)-1;j++)    b=b*10+num[index][j]-'0';for(;j<8;j++){    b=b*10+num[index][j]-'0';    c=0;    for(int k=j+1;k<9;k++)c=c*10+num[index][k]-'0';    if(b%c!=0)continue;    if(a+b/c==val) ans++;}    }    return ans;}int main(){    Init(0);    while(scanf("%d",&n)!=EOF)    {int ans=0;for(int i=0;i<cnt;i++)ans+=Is(i,n);printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击