求一道c语言习题,是数字相加的

给定一个表达式ABCDE+ACEXD=MBBEEX上述表达式为一个运算,是两个五位数相加,结果等于一个六位数要求第一个五数中,出现的数字,要和第二个五位数中的数字相同即例... 给定一个表达式
ABCDE+ACEXD = MBBEEX
上述表达式为一个运算,是两个五位数相加,结果等于一个六位数
要求第一个五数中,出现的数字,要和第二个五位数中的数字相同
即例如 (只是假设)如果12345是第一个五位数,则135x4要是第二个五位数(x可以为任意数字)
但是结果中,要求结果(只是假设)是m2255x(m是任意数字,x与第二个五位数中的x相同)
求出所有满足条件的五位数和六位数
输出结果的格式是
ABCDE = ....., ACEXD = ..... and BBEEX = ...... 是一种组合
将所有组合全部输出
。。。。。
求大神帮助,谢谢
输出结果里的BBEEX 是 MBBEEX 写错了。。。
展开
 我来答
zy1404
2014-08-30 · TA获得超过1387个赞
知道小有建树答主
回答量:784
采纳率:100%
帮助的人:472万
展开全部
#include<stdio.h>
void main()
{
long num1,num2,resul;
int i,g,s,b,q,w,t,j;
int g1,s1,b1,q1,w1,sw;
for (i=10000;i<100000;i++)
{
t=i;
num1=i;
g=t%10;
t=t/10;
s=t%10;
t=t/10;
b=t%10;
t=t/10;
q=t%10;
t=t/10;
w=t%10;
for (j=0;j<9;j++)
{
num2=w*10000+b*1000+g*100+10*j+s;
resul=num2+num1;
t=resul;
g1=t%10;
t=t/10;
s1=t%10;
t=t/10;
b1=t%10;
t=t/10;
q1=t%10;
t=t/10;
w1=t%10;
t=t/10;
sw=t%10;
if (sw)//六位数
{
if (w1==q)//结果的万位等于被加数的千位
{
if (q1==w1)//结果的千位等于万位
{
if (b1==q)//结果的百位等于被加数的千位
{
if (b1==s1)//百位等于十位
{
if (j==g1)//个位为j
{
printf("%d + %d=%d\n",num1,num2,resul);
}
}
}
}
}
}
}

}
}

lygszmjj
2014-08-30 · TA获得超过1814个赞
知道小有建树答主
回答量:1192
采纳率:0%
帮助的人:418万
展开全部
是否要求每个字母代表不同的数字?
追问
要求ABCDE = ....., ACEXD = ..... and MBBEEX

就是,第一个数字的第1位要求等于第二个数字的第1位,
第一个数字的第2位,要求等于想家结果的2,3位的数字。。。
就是找这样的数。。。
追答

单纯地循环会造成海量的运算,可以在编程前进行分析

分析下数字关系:

最高位M=1,A>5(否则就不可能加成六位数)

个位:E+D=X,或E+D=X+10

十位:D+X=E、D+X=E+10,,或D+X+1=E、D+X+1=E+10

当个位为E+D=X+10时,由D+X+1=E、D+X+1=E+10可推出2D=9或2D=19,均不和题目要求。

 

所以E+D=X

由 D+X=E 可推出 D=0,E=X,结合百位以上可得C=0,2A=B+10;

由 D+X=E+10 可推出 D=5,E+5=X,结合百位以上可得C=9,2A=B+9.

据此可编写程序。

#include<stdio.h> 
void main() 

 long int x1,x2,x3;
 long int a,b,c,d,e,x,m=1;
 for (a=5;a<9;a++)
   for (e=0;e<9;e++)
     { d=0;  //十位相加没进位
       x=e;
       c=0;
       b=2*a-10;
       x1=a*10000+b*1000+c*100+d*10+e;
       x2=a*10000+c*1000+e*100+x*10+d;
       x3=100000+b*10000+b*1000+e*100+e*10+x;
      if (x1+x2==x3) printf("%ld + %ld = %ld\n",x1,x2,x3);
       d=5;  //十位相加有进位

       x=e+5; if(x>10) break;
       c=9;
       b=2*a-9;
       x1=a*10000+b*1000+c*100+d*10+e;
       x2=a*10000+c*1000+e*100+x*10+d;
       x3=100000+b*10000+b*1000+e*100+e*10+x;
       if (x1+x2==x3) printf("%ld + %ld = %ld\n",x1,x2,x3);
      }
  getch();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
963739484
2014-08-30 · TA获得超过450个赞
知道小有建树答主
回答量:829
采纳率:0%
帮助的人:265万
展开全部
这得用到动态规划,而且问题规模不是一般大啊!5位数,光组合就吓死你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式