算法竞赛入门经典 暴力求解法 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\n",j,i,n);
                    else
                    {
                         printf("%d/0%d=%d\n",j,i,n);
                    }
                }
            }
        }
    }
}

运行结果:

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

posted on   Tob__yuhong  阅读(114)  评论(0编辑  收藏  举报

编辑推荐:
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
阅读排行:
· AI Agent爆火后,MCP协议为什么如此重要!
· Draw.io:你可能不知道的「白嫖级」图表绘制神器
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· Java使用多线程处理未知任务数方案
点击右上角即可分享
微信分享提示