3A7.6B

这道题目是从某某鱼那里得来了, 与诸君分享之。

某人买了 72 支笔, 总共花了 3A7.6B 元, 请问每支笔要多少钱? 当然题目里面的 A 和 B 都是整数来的, 而且都是处于 0-9 之间。

我们先将题目转化一下, 变成 3A76B 这样的一个数怎样才可以被 72 整除。首先列出一个 72 乘法表,

72*0=0,   72*1=72,   72*2=144,   72*3=216,   72*4=288

72*5=360,   72*6=432,   72*7=504,   72*8=576,   72*9=648

显然商只可能是一个三位数, 不妨设为 XYZ。以下的步骤都要看着这个乘法表进行。

先看 3A7, 除以 72 后我们只能取 X 为 4 或者 5, 因为如果是其他数字的话很显然不能得到 3A7 这样是数字。先取 X=4, 我进行下一步, 使:

3A768-72*400=(A+1)96B.(这四个四位数, 前面的 A+1 说的是千位数是 A+1)

我们从 96 着手, 怎样才能使 72*YZ 的结果的中间两位是 96 呢? 显然只能是 72*Y 的后两位加上 72*Z 的前两位等于 96 才能使之成立, 这时候乘法表再现神通了, 我们从乘法表查表得知,

72*5=360 的前两位 36 与 72*5=360 的后两位 60 相加可得 96, 以及 72*6=432 的后两位 32 与 72*9 的前两位 64 相加也可以得到 96, 于是 YZ 的取值可以是 55 或者 69。

于是我们就得到了两个解,455 或者 469, 再转换为原题就是 4.55 元或者 4.69 元.

接着再把 X=5 代入按照上面的思想算一遍, 发现无解, 这道题就算解完了。后面是 C++写的程序, 用来验算, 有兴趣的可以看看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
int main()
{
	int a=0,b=0,k;
	for(a=0;a<=9;a++)
		for(b=0;b<=9;b+=2)  //b的跳跃是2,因为最后一位B必然是偶数(可以被72整除),用于加速
		{
			k=30760+b+a*1000;  //所有数字均为整数会更快
			if(k{5f7b659ff3b2818cd787bc9e2e970b98d3e4ece1905bf98c409dc266242d6105}72==0)  //这也是为什么要将K转成整数的原因
				cout<<"result:"<<k/72<<" with A="<<a<<" and B="<<b<<endl;
		}
	return 0;
}

得出结果与上面算出来的是一样的。

2 评论

留下评论

Captcha Code

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据