蓝桥杯 带分数

来源:互联网 发布:龙虎榜数据几点公布 编辑:程序博客网 时间:2024/05/04 20:14
 历届试题 带分数  
时间限制:1.0s   内存限制:256.0MB

问题描述

100 可以表示为带分数的形式:100 = 3 + 69258 / 714。

还可以表示为:100 = 82 + 3546 / 197。

注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。

类似这样的带分数,100 有 11 种表示法。

输入格式

从标准输入读入一个正整数N (N<1000*1000)

输出格式

程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

注意:不要求输出每个表示,只统计有多少表示法!

样例输入1
100
样例输出1
11
样例输入2
105
样例输出2
6




一道简单的搜索。。。然而还是看了大牛的题解,惭愧。。。
先枚举整数部分,再枚举分母

代码:
#include <cstdio>#include <cstring>bool f1[15],f2[15];int ls,n,v,ans;bool checked(int x){    int y,l;    l=0;    while(x)    {        y=x%10;        if(f1[y]||y==0)return(false);        f1[y]=1;        l++;        x=x/10;    }    ls=9-l;    return(true);}int judge(int x){    int y;    int l=0;    for(int i=1;i<=9;i++)        f2[i]=f1[i];    while(x)    {        y=x%10;        if(f2[y])return(0);        f2[y]=1;        l++;        x=x/10;    }    return(l);}void dfs(int len,int x){    if(len<=ls/2)    {        if(judge(v*x)==ls-len)        {            //printf("%d %d %d\n",n-v,v*x,x);            ans++;        }        for(int i=1;i<=9;i++)        {            if(!f1[i])            {                f1[i]=1;                dfs(len+1,i+10*x);                f1[i]=0;            }        }    }}int main(){    scanf("%d",&n);    ans=0;    for(int i=1;i<n;i++)    {        if(checked(i))        {            v=n-i;            dfs(0,0);        }        memset(f1,0,sizeof(f1));    }    printf("%d\n",ans);    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 龋坏的牙齿痛怎么办 2岁半宝宝蛀牙怎么办 3岁宝宝门牙腐蚀怎么办 2岁宝宝门牙有洞怎么办 三岁宝宝有龋齿怎么办 牙龈肿痛脸肿了怎么办 孕妇牙疼的厉害怎么办 智齿引起的牙疼怎么办 蛀牙了有个大洞牙痛怎么办 长了蛀牙牙疼怎么办 面饼表面长黑点怎么办 牙结石自己掉了怎么办 狗狗得了牙结石怎么办 牙结石掉了有洞怎么办 内衣的钩子会掉怎么办? 新胸罩肩带老掉怎么办 牙齿少了一小块怎么办 儿童牙齿有黑斑要怎么办 牙齿又黄又臭怎么办 大牙烂空了很臭怎么办 牙齿已经烂没了怎么办 牙齿已经蛀没了怎么办 牙齿整个蛀掉了怎么办 小孩恒牙长歪了怎么办 孩子换牙长歪了怎么办 9岁门牙磕松动了怎么办 牙齿摔断了一半怎么办 牙齿从根部断了怎么办 牙断了还有牙根怎么办 牙根断在牙龈里怎么办 后槽牙掉了一半怎么办 孩子门牙摔断了怎么办 2岁宝宝牙齿断了怎么办 小孩乳牙摔掉了怎么办 9孩子门牙磕断了怎么办 牙齿断了但没掉怎么办 大人门牙摔断了怎么办 兔子内牙太长了怎么办 牙齿整个摔断了怎么办 大门牙摔断了怎么办 23岁门牙磕断了怎么办