首页
社区
课程
招聘
[讨论][讨论]关于C中枚举算法的一点讨论
发表于: 2013-6-25 10:46 3425

[讨论][讨论]关于C中枚举算法的一点讨论

2013-6-25 10:46
3425
先说题目: 以此为例来讨论一下。
  ABCDE
x     A
————
 EEEEEE

大概就是这个样子了,ABCDE各代表一个0-9的数字。要求就是ABCDE与A相乘的积等于EEEEEE这个6位数。我想都应该能看得懂。
我想不出来有别的好的算法,利用计算机的高速计算能力,下面是一个枚举算法的C语言实现。

#include <stdio.h>
int main()
{
  int i1,i2,i3,i4,i5;
  long multi,result;
  for (i1=1;i1<=9;i1++)
  {
    for (i2=0;i2<=9;i2++)
    {
      for (i3=0;i3<=9;i3++)
      {
        for (i4=0;i4<=9;i4++)
        {
          for(i5=1;i5<=9;i5++)
          {
            multi = i1*10000+i2*1000+i3*100+i4*10+i5;
            result = i5*100000+i5*10000+i5*1000+i5*100+i5*10+i5;
            if (multi*i1 == result)
            {
              
                              printf("\n%5d%2d%2d%2d%2d\n",i1,i2,i3,i4,i5);
                printf("X%12d\n",i1);
                printf("_____________\n");
                printf("%3d%2d%2d%2d%2d%2d\n",i5,i5,i5,i5,i5,i5);
              
            }
          }
        }
      }
    }
  }
  getchar();
  return 0;
}

得到了一个结果79365*7,但是我觉得这个算法不够完美。因为我觉得在计算之前我们根本不知道能够得到什么样的结果,比如说结果很多或者根本无解呢。按照题目的要求ABCDE是不相等的,所以我觉得应该在打印结果之前加一组判断,就是说在本程序唯一的IF那里加上判断i1-i5不相等的条件,最后再给出一个ELSE用来说明此题无解,不知道你怎么看?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 69
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
111111/1, 111111/2, 111111/3...
222222/1, 222222/2, 222222/3...
333333/1, 333333/2, 333333/3...

0不算的话只需要9次吧
.......说错,是九九八十一次
2013-6-25 12:05
0
游客
登录 | 注册 方可回帖
返回
//