数学白痴求教 ABCD*9=DCBA,求ABCD各是什么数字? 听说是三年级数学题,但我就是没想出来,想知道思路是怎样的?

推荐  (0) | 35人关注关注
31个答案
102 4

李子李子短信社科硕士,博物馆爱好者,果壳作者

2013-12-23 15:45

这是一道逻辑推理题,不是数学题。

1)四位数字*9,还是四位,那么肯定首位A=1,因此D=9无误了
2)1**9 x 9 还是四位,那么第二位B只能是0或者1。12*9 x 9无论如何都是五位数了。因为A已经是1了所以不可能是1,那么只能是0了。
3)10*9 x 9 = 9*01,第三位的数字与9的乘积的个位数,加9x9的进位8,必须是20,才会有进位为0的情况。因此8符合。
4)1089 x 9 = 9801,验算正确。

A=1 B=8 C=0 D=9

如果三年级小学生学过多位数乘法,从数学上这道题并没有任何“超纲”的地方。
重要的是培养孩子的思维能力,尤其是逻辑推理能力。这是区别开聪明人和一般人的最重要的地方之一
如果你不想让你的小孩子以后说出“数学滚出高考”这句话,多做点这种题,只有好处,没有坏处。

33 1

fengfeixue0219植物分子生物学博士

2013-12-23 15:42

四位数乘以9还是四位数,说明千位一定是1,不然结果就成5位数了,所以A一定是1,进而知道D一定是9
那么,百位上的数字,也就是B只能是0或1,不然和9乘依然会进位,使得结果成为5位数。那么用0和1试,可以知道B只能是0,不能是1。那么也容易知道C为8。即ABCD是1089。

29 2

我给出一个小学三年级标准解法:
ABCD×9=DCBA
我这里假定ABCD四个数字可能互相相同。
我这里首先假设A≠0。不然可以用小学方法得到另一个解,即A=B=C=D=0,这个很容易算出来,我们也不需要再提。
好了,因为1111×9=9999,大于1111的一切整数乘以9都不会是四位数,所以1000≤ABCD≤1111
所以A=1。
A×9=D,所以D=9。
原问题变为1BC9×9=9CB1。
从前面的不等式我们可以知道,B要么是0,要么是1。
分类讨论。
假设B=1,那么11C9×9=9C11。百位上的乘法运算是1×9=9,所以即使不考虑十位乘后的进位,C也至少是9,但是比9大就往千位进位了,千位就变了,所以C就是9,ABCD=1199>1111,不成立。
(看不懂上一行怎么办?没关系,这一步还有解法2。继续假设B=1,11C9≤1111,那C只能等于0,1109×9=9981≠9011,这个需要简单算一下,算到十位才能发现不对,比前一种方法略麻烦。)
由此排除B=1的可能,B=0。
有勇气思考这道题的成人开始思考以后想完成前面这几步应该不需要超过15s吧?哪怕你是心算用的最麻烦的第二种方法。
原问题变为10C9×9=9C01。接下来可以试数,乘法口诀背得熟的很快就能试出来,不考虑验算,对成人来说这道题心算耗时怎么也不能超过半分钟的。但是其实也有更正的方法。我们开始很正常地解10C9×9好了。个位9×9=81,剩下一个1,前面的8进到十位,十位数字就是(9×C的个位数+8),我们预先知道,乘出来的数十位应该是0,那么9×C的个位数是2,C只能是8。
最后顺着上一步就验算了,1089×9=9801,没问题。
我说的很麻烦,因为用文字描述乘法算式是很麻烦的事情。但是如果你手上有一支笔,拿着字母做这个乘法,那么就会看到这个小学方法其实非常简单。
我个人认为这道题不错,一方面挺有趣,另一方面加深小学生对乘式的理解。如果乘式上不再是熟悉的数字,而是不确定的字母,你还敢做么?再稍微勇敢一点儿,就有令你欣喜的突破了!
当然了,作为成人,还有一种更普适的办法:
9(1009+10C)=9001+100C
9081+90C=9001+100C
10C=80
C=8
这个已经不是小学三年级可以驾驭的了,但是对成年人来说,解这个一元一次方程也没太大难度吧?
初中以上文化程度的健康成人不会解这个题只可能是被对教育的刻板印象吓到了。

21 3

vx13Gentoo 用户

2013-12-25 04:45

我也来一个程序员的版本。在我们程序员思维下,整数的变量能表示的存储范围是有限的,没有正负号的情况下,进位的东西统统都要咔嚓掉。



再来个十六进制版的:

============================================================
补充:其实,如果要老老实实来做这道题的话,用 python 也有只需要一行的解法:

5 2

我用excel三列,
第一列从1000到9999,
第二列为第一列的逆写,公式为=MID(A3,4,1)&MID(A3,3,1)&MID(A3,2,1)&MID(A3,1,1)
第三列为第一列*9减第二列,公式为=B2-A2*9
然后筛选第三列数字为0时,就是1089;9801;0
完毕

3 1

这是一道典型的数学题目:

[ABCD] x 9 = [DCBA]
=> [ABCD] x 10 = [DCBA] + [ABCD]
=> [ABCD0] = [DCBA] + [ABCD]
=> A + D = 10 / A + D = 0 (舍)
& A = 1
& D + A = [AB]
& B + C + 1 = D
& C + B = C / C + B + 1 = C (舍)
=> A = 1 D = 9 B = 0 C = 8
=> [ABCD] = 1089

#只能找到下划线,所以就用下划线代替bar了。
额,夸张了,我连下划线都没有找到,悲催。我用[]吧。

体现了化归的数学思想以及算数基本运算法则。

原帖在 这里 http://blog.renren.com/blog/bp/Q7RwJZKZux

1 0
支持者: longstick

换成X86 32位MASM
mov esi, 0
mov ebx, 0
mov ecx, 10000/9
next:
add esi, 1
mov eax, esi
aaa
ror eax, 8
add eax, 0
aaa
ror eax, 8
add eax, 0
aaa
ror eax, 8
add eax, 0
aaa
ror eax, 8
bswap eax
mov edx, eax
add ebx, 9
mov eax, ebx
aaa
add eax, 0
ror eax, 8
aaa
ror eax, 8
add eax, 0
aaa
ror eax, 8
add eax, 0
aaa
ror eax, 8
cmp eax, edx
jz print
loop next

2 1

阿尔吉农飞岛国语言专家

2013-12-25 15:52
支持者: 马甲与小号 vx13

是时候展示octave的____了
find(str2num(fliplr(num2str((1:1111)'*9, '%04d'))) == (1:1111)')

1 0
支持者: 果壳乙烷


MATLAB怎么能够自甘堕落。。。

再来个扩展版的

2 1

YTedBug设计师

2013-12-25 16:11
支持者: 囧了个Orz Ralph

ABCD * 9 = DCBA =>
ABCD + DCBA = ABCD0 =>
A + D = 10
A * 9 = D
C + B + 1 = D
B + C = C

A = 1, D = 9 =>
C + B = 8 =>
B = 0,C = 8

ABCD = 1089

1 0
支持者: 果壳乙烷

A=1,D=9是人都知道啦→_→
B只能是0因为如果是1就成5位数了(1109除外但显然它不符合)

然后就挑吧~虽然只有一个1089【

1 0

null.二到不治而亡

2013-12-25 18:16
支持者: 果壳乙烷

csharp来报道
///================================================
int A, B, C, D, abcd, dcba;
for (int i = 1000; i < 10000; i++)
{
abcd = i;
A = Convert.ToInt16((abcd.ToString().ToArray()[0]).ToString());
B = Convert.ToInt16((abcd.ToString().ToArray()[1]).ToString());
C = Convert.ToInt16((abcd.ToString().ToArray()[2]).ToString());
D = Convert.ToInt16((abcd.ToString().ToArray()[3]).ToString());
dcba = D * 1000 + C * 100 + B * 10 + A;
if (abcd * 9 == dcba)
label4.Text = "ABCD = " + abcd.ToString();
}
///================================================
难看的一塌糊涂,勉强能用,优雅什么的,去死

0 0

旅行者3號软件工程师一枚 完美主义

2013-12-25 01:53

ABCD
× 9
-----
DCBA
因为是四位数,所以A≠0
且能乘9还不进位的只能是1
于是B也出来了,因为B≠A,就是说B≠1
又∵1以上的数字乘9都会进位
∴必然是0
又∵我们有了A=1 B=0
∴无论如何D一定是9(1*9=9)
于是我们有
10?9
× 9
-----
9?01
最后能得到1的只能是9×9=81 进8
而十位必须是0,于是只能是乘9等于?2的数,就是说是8×9=72
于是我们有8+2=10连同之前的70,就进位8
又因为B是0,所以0×9=0,连同进位的8,就是8.这个阶段不进位
最后1×9=9
最终推出并验证了ABCD=1089

0 0

在10进制下且A!=0的前提下讨论(看到ABCD*9的第一反应真的是十六进制啊)

由ABCD*10=ABCD+DCBA得A=(D+A)/10<=1,故A=1,D=A*9%10=9

又DCBA%9==0,有D+B+C+A=18或27,即B+C=8或17

千位上B=(A+D+(B+C)/10)%10=(B+C)/10<=1,故B=0,C=8。
若B=1则(B+C)>10,即B+C=17,C=17-1=16

或者这么考虑
十位上显然(C+B+A)%10=D,故C+B=8,不进位,百位上B+C=C,显然B=0,C=8


顺便蛋疼写了个纯C版本,输入部分自己补

N是位数,Sys是进制,C是乘数

unsigned long *i;
unsigned long Sys,N,Left,Right,Temp,C,k;
//N=4;Sys=10;C=9;
do{
if(Sys<2)printf("Sys<2");
else if(C<2)printf("C=0 or C=1");
else if(N<1)printf("N<1");
else if(C>=Sys)printf("c>=sys");
else{

i=calloc(N,sizeof(long));i[0]=1;

i[N-1]=1;
do
{
Left=0;Right=0;Temp=1;

for(k=0;k<N;k++)
{Left+=Temp*i[k];Right+=Temp*i[N-k-1];Temp*=Sys;}

if(Left*C==Right)
{printf("%lu\t%lu\t%lu\nDec:\n",C,Sys,N);
for(k=0;k<N;k++)printf("%lu\t",i[N-k-1]);
printf("\n\n");}

i[0]++;
for(k=0;k<N-1;k++)
if(Sys==i[k]){i[k]-=Sys;i[k+1]++;}

}while((i[N-1]*C<Sys)&&(i[N-1]!=Sys));

}
C++;
}while(0);

0 0

for a,b,c,d=0 to 9
if (a*1000+b*100+c*10+d)*9=d*1000+c*100+b*10+a then
msgbox a,b,c,d
next*4
语法有问题,阅读者请自行脑补为正确的程序.

0 0

Ralph临床医学学士

2013-12-25 15:50

我的思路:
1、根据题意,A、B、C、D是四个不相同的数字。
2、除了0和1以外的任何整数乘以9都会出现进位,因此第一位A只能是1或0
3、已知9x9=81,0X9=0,因此A=0则D必须也是0,与题意不符,因此A=1
4、 根据可知,D=9,即ABCD=1xx9,DCBA=9xx1
5、如B大于1,则必然出现Bx9大于10,出现进位,则不可能保持9xx1+1000为四位数,可知B=1或B=0,因已知A不等于B,因此B=0,则ABCD=10x9,DCBA=9x01。
6、Dx9=81,可知Cx9=?2时C0x9+Dx9=?01,当C=8时,8x9=72,符合题意,可知ABCD=1089,DCBA=9801

0 0

(1000a+100b+10c +d) * 9 = 1000d + 100c +10b +a
化简得8999a+890b = 991d + 10c
由于a不为0,
左边>= 8999 *1 + 890*0= 8999
右边<=991 *9 + 10*8 = 8999

0 0

ABCD*9=DCBA说明ABCD*10=ABCD0即ABCD+DCBA=ABCD0,可知:A+D=0、A=1,从而:D=9;又因为:B+C=C、B+C+1=D,即:C+1=D=9故可推出:C=8、B=0;综上:ABCD=1089。

0 0

楼上用pythonnnn的自重= =你觉得小学生能用得了吗。。。
说一个很直接的解法吧。。
我思维拐弯没那么快,首先想到的是列方程
(1000A+100B+10C+D)*9=(1000D+100C+10B+A)
很直接,是不是?
然后……试数吧……找到一组小于10的自然数解就好了= =

不过,先别急着拍砖,试数是有方法的,不会很盲目。如下:
化简方程后,四位数的关系是
8999A+890B-10C-991D=0

试数是有规律的……
A在千位,不能是0,C、D小于10,如果A>1,则D必定大于9,所以只能是A=1

现在是
8999+890B-10C-991D=0

D=9,得
80+890B-10C=0

D不能更小,否则C一定大于10
然后为了保证C小于10,显然B=0,所以C=8..

答案是ABCD=1089…毫无技巧的一般方法,我一定适合当工程师而不是数学家………

0 0

本题转化为ABCD0-ABCD=DCBA。五位数-四位数=四位数,万位数A为1。小学知识。然后看个位,得出D=9,于是转化为1BC90-1BC9=9CB1,十位数得出8-C=B;百位数得出C-B=C,于是B=0,C=8,所以ABCD=1089。 - 9分钟前

本题将ABCD*9=DCBA转化为ABCD0-ABCD=DCBA,就变成类似于比九宫格简单得很多很多的填表格方法。关键是让学生有发散思维。多好的题!

微博上@邓飞 提出话题的时候,我还给予回复:亮点不在答案。亮点在于你碰到不懂问题的时候,你所采取的策略、努力:或放弃?或努力?或抱怨?亮点还在于家长碰到此类问题的态度!美国数学从高中开始超越中国,因为他们培养的是自己去寻找规律创造公式的能力。而我们习惯于给你范围给你公式,然后你规矩做题。有用吗?

0 0

我也无聊的算了算,不知道有谁看得懂么。

0 0

这种算法可视化还不错。可爱的C,伟大的C-Free~~~

0 0

感谢@Sherlock-Lu 的思路

我用C做了一个ABCD*i=DCBA (i=2,3,,,9) 的通解...(i=1答案有点多...)

结论,ABCD*i=DCBA只有i为9或4时才有非零解……

0 0

我来个EXCEL版的

=LARGE(IF(ROW(1000:1111)*9=((--MID(ROW(1000:1111),4,1))*1000+(--MID(ROW(1000:1111),3,1))*100+(--MID(ROW(1000:1111),2,1))*10+(--MID(ROW(1000:1111),1,1))*1),ROW(1000:1111),0),1)

输入上面的公式之后,需要摁住CTRL+SHIFT再摁回车确认,公式里前后像我图片里那样显示一个大括号才正确哦

另,上面的公式只能看到最大的那个结果,可以把最后一个参数换成2,就可以看到结果是0,表示没有另一个解

0 1


(mac/linux 可以直接运行)
#! /usr/bin/perl
for(1000..9999){
$n=$_*9;
if ((substr $_,0,1)==(substr $n,3,1) and
(substr $_,1,1)==(substr $n,2,1) and
(substr $_,2,1)==(substr $n,1,1) and
(substr $_,3,1)==(substr $n,0,1) and
($n<=9999)){
print "$_";
last}
}

很普通的解法

(好久好久以后
才发现可以这么写

1 2

LeedyCS in progress

2013-12-25 11:49
支持者: vx13

是时候展示 Ruby 的优雅了!

运行结果 1089

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2018] 6282-492号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区