• 算法学习-带分数


    问题描述
    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 <stdio.h>
    
    int w=0,n,count=0;
    int list[]={1,2,3,4,5,6,7,8,9};
    
    
    int main()
    
    {
        void perm(int a[],int n,int k=-1);
        inline void Swap(int &a,int &b);
        int GetNum(int list[],int i,int j);
        
    
    
        scanf("%d",&n);
        int temp=n;
        while(temp!=0)
        {
        temp=temp/10;
        w++;
    
        }
    
    
    
        perm(list,9);
        printf("%d
    ",count);
    
    
        return 0;
    }
    
    
    
    int GetNum(int list[],int i,int j)
    {
    
    //将list[i]到list[j]之间转换为数字
        int k,num=0;
        for(k=i;k<=j;k++)
        {
    
        num=num*10+list[k];
        }
        return num;
    
    
    }
    
    void perm(int a[],int size,int k=-1)
    {
        int i;
        if(k==-1) k=size-1;
    
        if(k==0)
        {
            //排列结束。
            int j,u;//j表示a的末尾位数 不能超过num的位数;u表示bLast所在的位置
            int a=0,b=0,c=0,bLast=0;
    
            for(j=0;j<w;j++)
            {
                a=GetNum(list,0,j);
                /*num=a+b/c
                    
                    变形可以得到
                    b=(num-a)*c
                    而cLast=list[8]
                    可以得到的是
                    bLast=((num-a)*list[8])%10;
    
    
                */
                bLast=((n-a)*list[8])%10;
                for(u=j+1;u<8;u++)
                {    
                    if(list[u]==bLast)
                    {
                        b=GetNum(list,j+1,u);
                        c=GetNum(list,u+1,8);
    
                        if(a+b/c==n&&b%c==0) count++;
    
    
                    }
    
                }
    
    
            }
                    
    
        }    
    
        else
        {
            for(i=0;i<=k;i++)
            {
                int tmp;
                tmp=a[i];
                a[i]=a[k];
                a[k]=tmp;
                
                perm(a,size,k-1);
            
                tmp=a[i];
                a[i]=a[k];
                a[k]=tmp;
    
    
            }
    
        }
    
    
    
    }
  • 相关阅读:
    静态代码块、非静态代码块、构造函数之间的执行顺序
    Linux跨主机传输文件
    🗒 Linux 系统监控
    Mysql Mode
    Mysql 表锁行锁
    Centos 下修改时区
    Redis 解决内存过大
    Mysql 表达式
    Centos 二进制包安装Mysql5.7
    Vim 快捷键
  • 原文地址:https://www.cnblogs.com/xcr1234/p/4550396.html
Copyright © 2020-2023  润新知