zoukankan      html  css  js  c++  java
  • 历届试题 带分数

    dfs,求出1-9的全排列。
    把1-9的排列划分为num1,num2,num3,看是否满足n==num1+num2/num3。
    历届试题 带分数  
    时间限制: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<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int vis[20],a[20];
    __int64 n;
    int ans=0;
    __int64 solve(int i,int j)
    {
        int k;
        __int64 sum=0;
        for(k=i;k<=j;k++)
        {
            sum=sum*10+a[k];
        }
        return sum;
    }
    void cp()
    {
        __int64 num1,num2,num3;
        int r=0,i,j;
        __int64 temp=n;
        while(temp)
        {
            temp=temp/10;
            r++;
        }
       for(i=0;i<r;i++)
       {
          num1=solve(0,i);
         // printf("num1=%I64d
    ",num1);
          if(num1>n)
            return ;
          for(j=i+1;j<=i+(9-i)/2;j++)
            {
                num3=solve(i+1,j);
                num2=solve(j+1,9-1);
             // printf("%I64d	%I64d	%I64d
    ",num1,num2,num3);
               if(num3!=0&&num2>num3&&num2%num3==0&&n==num1+num2/num3)
                   ans++;
            }
       }
    }
    void dfs(int cur)
    {
        int i;
        if(cur==9)
          {
              cp();
            //  for(i=0;i<cur;i++)
              //   printf("%d",a[i]);
             //printf("
    ");
             return ;
          }
       for(i=1;i<=9;i++)
        {
           if(vis[i]==0)
              {
                  a[cur]=i;
                  vis[i]=1;
                  dfs(cur+1);
                  vis[i]=0;
              }
        }
    
    }
    int main()
    {
        memset(vis,0,sizeof(vis));
        scanf("%I64d",&n);
         dfs(0);
        printf("%d
    ",ans);
        return 0;
    }
    
     
  • 相关阅读:
    2021/1/10周总结一
    java基础复习五
    java基础复习四
    构建之法读书笔记三
    javaweb学生教务系统
    java基础复习三
    关于eclipse项目错误的一些小经验总结
    Java基础复习二
    JavaDoc文档
    2017-2018-2 20179216 《网络攻防与实践》 第四周总结
  • 原文地址:https://www.cnblogs.com/cancangood/p/4363333.html
Copyright © 2011-2022 走看看