zoukankan      html  css  js  c++  java
  • 蓝桥杯 带分数

    问题描述

    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
     
    【搜索+剪枝】
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 using namespace std;
     5 
     6 int a[10],vis[10],ans;
     7 int const n=9;
     8 
     9 __int64 num,num1,num2,num3;
    10 
    11 __int64 solve(int i,int j)  // 从 a数组的第i位到第j位
    12 {
    13     __int64 temp=0;
    14     for(int k=i;k<=j;k++)
    15         temp=temp*10+a[k];
    16     return temp;
    17 }
    18 
    19 void count1()// 该排列 按顺序分为 num1 num2 num3三部分  结果能不能组合成num
    20 {
    21     int l=1;
    22     __int64 temp;
    23     temp=num;
    24     while(temp=(temp/10))
    25         l++;// num1 的长度
    26     for(int i=0;i<l;i++)
    27     {
    28         num1=solve(0,i);
    29         if(num1>num)
    30             return ;
    31         for(int j=(n-i)/2;j<=n-(i+1);j++)
    32         {
    33             num2=solve(i+1,i+j);
    34             num3=solve(i+j+1,n-1);
    35             //printf("%I64d    %I64d    %I64d
    ",num1,num2,num3);
    36             if(num3!=0&&num2>num3&&num2%num3==0&&num==num1+num2/num3)
    37                 ans++;
    38 
    39         }
    40 
    41     }
    42 
    43 
    44 }
    45 
    46 void dfs(int start,int n)
    47 {
    48     if(start==n)
    49         count1();
    50     for(int i=1;i<=9;i++)
    51     {
    52         if(vis[i])
    53             continue;
    54         a[start]=i;
    55         vis[i]=1;
    56         dfs(start+1,n);
    57         vis[i]=0;
    58     }
    59 }
    60 
    61 
    62 int main()
    63 {
    64     while(scanf("%I64d",&num)!=EOF)
    65     {
    66         memset(vis,0,sizeof(vis));
    67         ans=0;
    68         dfs(0,n);
    69         printf("%d
    ",ans);
    70     }
    71     return 0;
    72 }
  • 相关阅读:
    OSError: cannot open resource(pillow错误处理)
    boost 库中文教程
    博客案例
    requests模块
    浅析Python中的struct模块
    面试基础知识点总结
    ant安装、环境变量配置及验证
    TestNG学习-001-基础理论知识
    selenium 常见面试题以及答案
    HTML5
  • 原文地址:https://www.cnblogs.com/assult/p/3561148.html
Copyright © 2011-2022 走看看