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 <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 using namespace std;
     7 const double EXP=1E-5;
     8 const int MS=11;
     9 int flag[MS],flag1[MS];
    10 int ans=0;
    11 int len;
    12 int a;
    13 int init(int x)
    14 {
    15     memset(flag,0,sizeof(flag));
    16     flag[0]=1;
    17     int ok=1;
    18     int l=0;
    19     while(x&&ok)
    20     {
    21         int r=x%10;
    22         if(flag[r])
    23             return 0;
    24         flag[r]=1;
    25         x/=10;
    26         l++;
    27     }
    28     return l;
    29 }
    30 int length(int x)
    31 {
    32     int l=0;
    33     memcpy(flag1,flag,sizeof(flag));
    34     while(x)
    35     {
    36         int r=x%10;
    37         if(flag1[r])
    38             return 0;
    39         flag1[r]=1;
    40         x/=10;
    41         l++;
    42     }
    43     return l;
    44 }
    45 
    46 void dfs(int l,int x)
    47 {
    48     if(l<=len/2)
    49     {
    50         if(length(x*a)==len-l)
    51             ans++;
    52         for(int i=1;i<10;i++)
    53         {
    54             if(flag[i])
    55                 continue;
    56             flag[i]=1;
    57             dfs(l+1,x*10+i);
    58             flag[i]=0;    
    59         }
    60     }
    61     return ;    
    62 } 
    63 
    64 int main()
    65 {
    66     int n,i;
    67     cin>>n;
    68     for(i=1;i<n-1;i++)
    69     {
    70         len=init(i);
    71         if(len)
    72         {
    73             len=9-len;
    74             a=n-i;
    75             dfs(0,0);
    76         }
    77     }
    78     cout<<ans<<endl;
    79     return 0;
    80 }
  • 相关阅读:
    二维前缀和
    素数筛法
    dp-最大连续子序列的和
    dp-最长递增子序列 (LIS)
    dp-完全背包(题)
    dp-多重背包
    dp-完全背包
    DP-01背包 (题)
    DP- 01背包问题
    DP-直线分割递推
  • 原文地址:https://www.cnblogs.com/767355675hutaishi/p/4298450.html
Copyright © 2011-2022 走看看