不会啊这题,完全不知道要怎么入手
给定等式 ABCDE
DFG
+ DFG
-------------
XYZDE
其中每个字母代表一个数字,且不同数字对应不同字母。编程求出这些数字并且打出这个数字的 算术计算竖式。
这题怎么做啊?
----------------解决方案--------------------------------------------------------
ABCDE
DFG
+ DFG
-------------
XYZDE
我怎么感觉有点问题
ABCDE 前3个数ABC
还有XYZ
和其他数完全没有关系
自己感觉上就感觉没法确定啊
假如A=0-9感觉上都没问题啊
不好意思 看错了,原来已经字母代替了10个数字了
[此贴子已经被作者于2007-5-11 6:48:09编辑过]
----------------解决方案--------------------------------------------------------
ABCDE+DFG+DFG=XYZDE
29786+850+850=31486
程序代码:
#include <iostream>
#include <algorithm>
using namespace std;
int x[10];
int used[10];
void dfs(int d)
{
if(d==10){
int a=0,i;
for(i=0;i<5;i++){
a=a*10+x[i];
}
int b=x[3];
for(i=5;i<7;i++){
b=b*10+x[i];
}
int c=0;
for(i=7;i<10;i++){
c=c*10+x[i];
}
c=(c*10+x[3])*10+x[4];
if(a+b+b==c){
printf(\"%d+%d+%d=%d\n\",a,b,b,c);
}
}
else {
for(int i=0;i<10;i++){
if(!used[i]){
used[i]=1;
x[d]=i;
dfs(d+1);
used[i]=0;
}
}
}
}
int main()
{
dfs(0);
}
----------------解决方案--------------------------------------------------------
还是不懂,能不能顺便把思路说一下,还有我的编译器是TC
----------------解决方案--------------------------------------------------------
用两个数组分别存储要加的数的个十百千万等位,然后数组对应的位相加,如果超过十则向前加一位(用IF来实现)
注意细节,应该可以作出来
----------------解决方案--------------------------------------------------------
哦,这样偶就懂了,怎么就没想到呢~~~~~~~~
----------------解决方案--------------------------------------------------------
谁能帮我解释一下3楼的程序
或者给个这个题的想法
我觉得5楼说的用数组相加
但是感觉每个数组位从0-9循环应该也不会比10的10次方少多少
谁能帮我解释一下3楼的程序
----------------解决方案--------------------------------------------------------
深度优先搜索策略,穷举ABCDEFGXYZ的所有排列,将其存放在x[]中。
参考:http://www.baidu.com/s?tn=myie2dg&ie=gb2312&bs=DFS%CB%E3%B7%A8+%C9%FA%B3%C9%C5%C5%C1%D0&sr=&z=&cl=3&f=8&wd=DFS+%C9%FA%B3%C9%C5%C5%C1%D0&ct=0
----------------解决方案--------------------------------------------------------