求解:华为一道面试题,该怎么处理
求解:华为一道面试题
一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来,谢谢!希望有代码,我不知道如何下笔!
------解决方案--------------------
(A*10000+B*1000+C*100+D*10+E)*4=E*1000+D*1000+C*100+B*10+A
用循环不久能求出来了
------解决方案--------------------
推理如下:
因为结果还是5位,所以A小于或等于2.
因为E*4的结果不可能是奇数,所以A不等于1,A=2.
因为A等于2,只有E等于8的条件下才满足E×4=X2同时大于等于8.
因为E=8,所以B等于小于2。
如果B=2,4×8=32,D×4的结果必须是个位等于9,条件不成立,所以B=1.
因为B=1,所以D只能是2或7(D与4的乘积满足X8)。
剩下两个结果很容易就推算出来了。
21978
------解决方案--------------------
int main()
{
int a,b,c,d,e;
for(a=0;a <10;a++)
for(b=0;b <10;b++)
for(c=0;c <10;c++)
for(d=0;d <10;d++)
for(e=0;e <10;e++)
{
if((a*10000+b*1000+c*100+d*10+e)*4==(e*10000+d*1000+c*100+b*10+a))
cout < <(a*10000+b*1000+c*100+d*10+e) < < "*4== " < <e*10000+d*1000+c*100+b*10+a < <endl;
}
system( "pause ");
return 0;
}
------解决方案--------------------
21978
#define foor(x) for(int x=0;x <10;++x)
int main(int , char* [])
{
foor( A ){
foor( B ){
foor( C ){
foor( D ){
foor( E ){
if( (A*10000+B*1000+C*100+D*10+E)*4==E*10000+D*1000+C*100+B*10+A )
printf( "%d%d%d%d%d\n ",A,B,C,D,E);
}
}
}
}
}
return 0;
};
------解决方案--------------------
一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来,谢谢!希望有代码,我不知道如何下笔!
~~~~~~~~~~~
由A*4+进位= E,并且E*4个位是A
--> A=1,2时,乘以4不溢出;E*4的个位必定是偶数
--> A=2;E*4个位是2
--> E=8
--> 由8*4=32
--> D*4+3的个位数字是B;C*4+进位=C;B*4+进位=D,不能产生进位
--> B=0,1,2;D*4+3只能产生个位数字为奇数
--> B=1
--> D=2,7;1*4+进位=D,不能产生进位
--> D=7
--> C*4+3=3C,其中个位是C,并且产生进位3
--> C=9
所以是21978
------解决方案--------------------
有怎么麻烦么?
A 只能等于2,这个可以一眼看出来,因为只有 1,或者2 * 4 才小于10;
但由于 A 又要等于E * 4的个位,A则肯定是个偶数.这样 得到 E = 8;
这样就只就得到2BCD8 只要判断3个~~~~~~
------解决方案--------------------
稍改一下
int main(void)
{
int a,b,c,d,e;
for(a=1;a <10;a++)
for(b=0;b!=a&&b <10;b++)
for(c=0;c!=a&&c!=b&&c <10;c++)
for(d=0;d!=a&&d!=b&&d!=c&&d <10;d++)
for(e=1;e!=a&&e!=b&&e!=c&&e!=d&&e <10;e++)
{
if((a*10000+b*1000+c*100+d*10+e)*4==(e*10000+d*1000+c*100+b*10+a))
cout < <(a*10000+b*1000+c*100+d*10+e) < < "*4== " < <e*10000+d*1000+c*100+b*10+a < <endl;
}
system( "pause ");
return 0;
}
------解决方案--------------------
既然是编程题目,推理结果就没有意,借用楼上的,修正一下:
一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来,谢谢!希望有代码,我不知道如何下笔!
------解决方案--------------------
(A*10000+B*1000+C*100+D*10+E)*4=E*1000+D*1000+C*100+B*10+A
用循环不久能求出来了
------解决方案--------------------
推理如下:
因为结果还是5位,所以A小于或等于2.
因为E*4的结果不可能是奇数,所以A不等于1,A=2.
因为A等于2,只有E等于8的条件下才满足E×4=X2同时大于等于8.
因为E=8,所以B等于小于2。
如果B=2,4×8=32,D×4的结果必须是个位等于9,条件不成立,所以B=1.
因为B=1,所以D只能是2或7(D与4的乘积满足X8)。
剩下两个结果很容易就推算出来了。
21978
------解决方案--------------------
int main()
{
int a,b,c,d,e;
for(a=0;a <10;a++)
for(b=0;b <10;b++)
for(c=0;c <10;c++)
for(d=0;d <10;d++)
for(e=0;e <10;e++)
{
if((a*10000+b*1000+c*100+d*10+e)*4==(e*10000+d*1000+c*100+b*10+a))
cout < <(a*10000+b*1000+c*100+d*10+e) < < "*4== " < <e*10000+d*1000+c*100+b*10+a < <endl;
}
system( "pause ");
return 0;
}
------解决方案--------------------
21978
#define foor(x) for(int x=0;x <10;++x)
int main(int , char* [])
{
foor( A ){
foor( B ){
foor( C ){
foor( D ){
foor( E ){
if( (A*10000+B*1000+C*100+D*10+E)*4==E*10000+D*1000+C*100+B*10+A )
printf( "%d%d%d%d%d\n ",A,B,C,D,E);
}
}
}
}
}
return 0;
};
------解决方案--------------------
一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来,谢谢!希望有代码,我不知道如何下笔!
~~~~~~~~~~~
由A*4+进位= E,并且E*4个位是A
--> A=1,2时,乘以4不溢出;E*4的个位必定是偶数
--> A=2;E*4个位是2
--> E=8
--> 由8*4=32
--> D*4+3的个位数字是B;C*4+进位=C;B*4+进位=D,不能产生进位
--> B=0,1,2;D*4+3只能产生个位数字为奇数
--> B=1
--> D=2,7;1*4+进位=D,不能产生进位
--> D=7
--> C*4+3=3C,其中个位是C,并且产生进位3
--> C=9
所以是21978
------解决方案--------------------
有怎么麻烦么?
A 只能等于2,这个可以一眼看出来,因为只有 1,或者2 * 4 才小于10;
但由于 A 又要等于E * 4的个位,A则肯定是个偶数.这样 得到 E = 8;
这样就只就得到2BCD8 只要判断3个~~~~~~
------解决方案--------------------
稍改一下
int main(void)
{
int a,b,c,d,e;
for(a=1;a <10;a++)
for(b=0;b!=a&&b <10;b++)
for(c=0;c!=a&&c!=b&&c <10;c++)
for(d=0;d!=a&&d!=b&&d!=c&&d <10;d++)
for(e=1;e!=a&&e!=b&&e!=c&&e!=d&&e <10;e++)
{
if((a*10000+b*1000+c*100+d*10+e)*4==(e*10000+d*1000+c*100+b*10+a))
cout < <(a*10000+b*1000+c*100+d*10+e) < < "*4== " < <e*10000+d*1000+c*100+b*10+a < <endl;
}
system( "pause ");
return 0;
}
------解决方案--------------------
既然是编程题目,推理结果就没有意,借用楼上的,修正一下: