| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 458 人关注过本帖
标题:[讨论]这个小题目有没有什么好的解决方法?
只看楼主 加入收藏
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
结帖率:0
收藏
 问题点数:0 回复次数:5 
[讨论]这个小题目有没有什么好的解决方法?
/*
有一道很小学的题目,问题如下:
  A B
  C D
  E F
+ G H
  ------
I I I
上述加法式子中A~I分别分0~9,你知道它们分别为多少吗?

关于这个题目稍作尝试就能得出一堆答案,一般常与计算机打交道的人都想把这种繁琐的事情交给计算机去做,
下面是我的程序,不知道有没有更好的方法,大家可以来交流一下啊...
*/

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a,b,c,d,e,f,g,h,i;
    int sum=0;
    int A[10]={0,1,2,3,4,5,6,7,8,9};
    do
    {
        a=A[0];
        b=A[1];
        c=A[2];
        d=A[3];
        e=A[4];
        f=A[5];
        g=A[6];
        h=A[7];
        i=A[8];
        if((a+c+e+g)*10+b+d+f+h==i*100+i*10+i && a*c*e*g!=0)
        {
            cout<<a<<"  "
            <<b<<"  "
            <<c<<"  "
            <<d<<"  "
            <<e<<"  "
            <<f<<"  "
            <<g<<"  "
            <<h<<"  "
            <<i<<"  "<<endl;
            sum++;
        }
    }while(next_permutation(A,A+10));
    cout<<"所有的可能为:"<<sum<<endl;
    return 0;
}
搜索更多相关主题的帖子: 计算机 include 
2008-09-11 20:24
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
自己顶顶...

2008-09-11 21:13
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
看了 代码 不好意思 并不是很懂 尤其是<algorithm>中的 next_permutation()
初看了 想用枚举 来定义a,b,c,d......
但是 这样 就不能再给a,b,c,d......赋值了
帮你顶顶
2008-09-11 21:42
huihexiang
Rank: 1
等 级:新手上路
威 望:1
帖 子:11
专家分:0
注 册:2008-9-1
收藏
得分:0 
A B
  C D
  E F
+ G H

最大情况
  6 5
  7 4
  8 3
+ 9 2
------
3 1 4

最小情况
  0 4
  1 5
  2 6
+ 3 7
------
  8 2
则初步判断i为1或者2
若i为1,则
  A B
  C D
  E F
+ G H
最小情况
  0 5
  2 6
  3 7
+ 4 8
------
1 1 6
与iii=111违背
推出i只可能为2

这样可以简化一下数组,少一个元素,少点计算量,不过编程前还得自个儿推导一下
不知道你说的更好的方法是指计算量少还是指比较省功夫

[[it] 本帖最后由 huihexiang 于 2008-9-12 00:10 编辑 [/it]]
2008-09-12 00:00
huihexiang
Rank: 1
等 级:新手上路
威 望:1
帖 子:11
专家分:0
注 册:2008-9-1
收藏
得分:0 
//相应做点修改
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a,b,c,d,e,f,g,h,i=2;
    int sum=0;
    int A[9]={0,1,3,4,5,6,7,8,9};
    do
    {
        a=A[0];
        b=A[1];
        c=A[2];
        d=A[3];
        e=A[4];
        f=A[5];
        g=A[6];
        h=A[7];
        if((a+c+e+g)*10+b+d+f+h==i*100+i*10+i && a*c*e*g!=0)
        {
            cout<<a<<"  "
            <<b<<"  "
            <<c<<"  "
            <<d<<"  "
            <<e<<"  "
            <<f<<"  "
            <<g<<"  "
            <<h<<"  "
            <<i<<"  "<<endl;
            sum++;
        }
    }while(next_permutation(A,A+9));
    cout<<"所有的可能为:"<<sum<<endl;
    return 0;
}
2008-09-12 00:04
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
楼上推得确实没错...本来这就是个自己推导的东西...
我只顺便拿来练练编程...其实,再推下去,稍作尝试,结果就出来了...

2008-09-12 12:17
快速回复:[讨论]这个小题目有没有什么好的解决方法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.090659 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved