求一道c语言习题,是数字相加的
给定一个表达式ABCDE+ACEXD=MBBEEX上述表达式为一个运算,是两个五位数相加,结果等于一个六位数要求第一个五数中,出现的数字,要和第二个五位数中的数字相同即例...
给定一个表达式
ABCDE+ACEXD = MBBEEX
上述表达式为一个运算,是两个五位数相加,结果等于一个六位数
要求第一个五数中,出现的数字,要和第二个五位数中的数字相同
即例如 (只是假设)如果12345是第一个五位数,则135x4要是第二个五位数(x可以为任意数字)
但是结果中,要求结果(只是假设)是m2255x(m是任意数字,x与第二个五位数中的x相同)
求出所有满足条件的五位数和六位数
输出结果的格式是
ABCDE = ....., ACEXD = ..... and BBEEX = ...... 是一种组合
将所有组合全部输出
。。。。。
求大神帮助,谢谢
输出结果里的BBEEX 是 MBBEEX 写错了。。。 展开
ABCDE+ACEXD = MBBEEX
上述表达式为一个运算,是两个五位数相加,结果等于一个六位数
要求第一个五数中,出现的数字,要和第二个五位数中的数字相同
即例如 (只是假设)如果12345是第一个五位数,则135x4要是第二个五位数(x可以为任意数字)
但是结果中,要求结果(只是假设)是m2255x(m是任意数字,x与第二个五位数中的x相同)
求出所有满足条件的五位数和六位数
输出结果的格式是
ABCDE = ....., ACEXD = ..... and BBEEX = ...... 是一种组合
将所有组合全部输出
。。。。。
求大神帮助,谢谢
输出结果里的BBEEX 是 MBBEEX 写错了。。。 展开
展开全部
#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);
}
}
}
}
}
}
}
}
}
展开全部
是否要求每个字母代表不同的数字?
追问
要求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();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这得用到动态规划,而且问题规模不是一般大啊!5位数,光组合就吓死你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询