zoukankan      html  css  js  c++  java
  • 算法竞赛入门经典 暴力求解法 7.1简单枚举 除法

    问题描述:输入正整数n,按照从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79。

    样例输入:

    62

    样例输出:

    79546/01283=62

    94736/01528=62

    分析:枚举0~9的所有排列?没有必要,只需要枚举fghij就可以算出abcde,然后判断是否所有数字都不相同即可。不仅程序简单而且枚举量也从10!=3628800降至不到1万。

    由此可见,即使采用暴力枚举,也是需要认真分析问题的。

    下面贴上实现代码(可以实现多组样例输入):

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    bool Identify(int i,int j,int &res1,int &res2)
    {
       int n[10],flag=1;
       n[0]=i%10,n[1]=i/10%10,n[2]=i/100%10,n[3]=i/1000%10,n[4]=i/10000%10;
       n[5]=j%10,n[6]=j/10%10,n[7]=j/100%10,n[8]=j/1000%10,n[9]=j/10000%10;
       sort(n,n+10);
       for(int i=0;i<10;i++)
       {
           if(n[i]!=i)
           {
               flag=0;
               break;
           }
       }
       if(flag==1)
        return true;
       else
        return false;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)==1)
        {
            int i,j;
            for(i=1234;i<=98765;i++)
            {
                j=i*n;
                if(j>=10234&&j<=98765)
                {
                    int res1=0,res2=1;
                    if(Identify(i,j,res1,res2)==true)
                    {
                        if(i/10000%10&&j/10000%10)
                           printf("%d/%d=%d
    ",j,i,n);
                        else
                        {
                             printf("%d/0%d=%d
    ",j,i,n);
                        }
                    }
                }
            }
        }
    }

    运行结果:

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    爱的火花
    为你祝福
    你有成功的强烈愿望吗?人格魅力应该是这样修养而成的
    爱已远走
    我要跳舞
    创业家比商业模式更重要
    月下独酌
    李珊(再帮别人名字作诗)
    分析MSSQL数据库的用户表数和记录数 (转载)
    几个常用的SharePoint对象模型的有用函数
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965583.html
Copyright © 2011-2022 走看看