考考你的算法……

QQRN 2002-04-18 03:55:49
一个非0的自然数,把它的末位数移至首位,得到的数字是原来数字的两倍!求此数字是多少?

我算了3个小时没算出来……
但是有人8分钟算出……(她自己说的)
如果单凭计算机的能力的话……
估计……呵呵……跟我一样算不出或浪费时间……
答对有奖……
...全文
86 65 打赏 收藏 转发到动态 举报
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuwutao 2002-04-20
  • 打赏
  • 举报
回复
程序已经贴在上面,不过声明:我是参考阿甘的算法来写的,在此谢谢阿甘
wuwutao 2002-04-20
  • 打赏
  • 举报
回复
我写的程序可以运行并正确计算,不过要在.Net下运算,因为VB LONG 的长度不够
wenw 2002-04-20
  • 打赏
  • 举报
回复
设存在“首位移到末位存在",则有
x(1)···x(n)*2=x(2)···x(n)x(1)
那么,x(2)=x(1)*2+k1 k1=0 or 1 x(2)<10
x(3)=x(2)*2+k2-k1*10 k2=0 or 1 x(2)<10
那么如果任一位乘以2有进位的话,它就必须是奇数,如果某一位是奇数,那么后面的数都必须有进位,那么在1-9中,我们只有
(9加1)乘2后全部有进位,同时,我们也找不出乘2后总没有进位的偶数出来,全9的数肯定不合要求。
所以“首位移到末位不存在"
Jameszht 2002-04-20
  • 打赏
  • 举报
回复
songyangk(小草):楼上的,是把末位移到首位呀?!

上面有人要求求證一個類似的命題:我只不過給出我的答案而已。
“末位移到首位”已由gump阿甘完成了,並且算法也由濤哥給出了。
“首位移到末位不存在"上面是我的想法,謬誤之處請指正.
謝謝!

QQRN 2002-04-20
  • 打赏
  • 举报
回复
忘了写她给的答案:

mission accomplished:
这个数是:421052631578947368 把8移到首位,
就得出: 842105263157894736 凑巧是2倍.
QQRN 2002-04-20
  • 打赏
  • 举报
回复
结了这个帖子……
下面是那个MM写的……大家参考参考

好啊.其实很简单啊!^^

设yxxxxx....xxxxxz. 所以zyxxxxx....xxxxxx就是两倍啊. ^^

那z就应该等于2y或2y+1,而为了使位数不变y就只能取1,2,3,或4.

而原数n位数的值就应该是两倍数的n-1位数.(除了个位数).

用每一个去试的话,会发现1,2,3都是不可以的,因为算到第13位时就有无限循环.

结果只有y取8的时候可以吻合!^^
sippey 2002-04-19
  • 打赏
  • 举报
回复

(A3-070)求證:不存在這樣的整數,把它的首位數字移到末位之後,得到的數是原數的兩倍。




用类似阿甘的方法证出
wenw 2002-04-19
  • 打赏
  • 举报
回复
各位看官没有看到他们的答案有的是错的吗,要处理,你应该要想到这一点
因为自然数没有前导0,所以0不会是尾数,也不会是第一个数。
尾数移动到第一位后数要变大一倍,因此最后一位必须是第一位的两倍或两倍加一,所以第一位必须是1-4这四个数之一,而尾数必须为第一位的两倍或两倍加一,而且每一位都是前一位的两倍或两倍加一,不可能是更大的数。所以,这个算法以程序实现就是这样的。
Dim x(1100)
Dim i As Long, j As Long, k As Long
Dim s As Long
For i = 2 To 1000
For x(i) = 2 To 9
k = 0
For j = i - 1 To 1 Step -1
x(j) = x(j + 1) * 2 Mod 10 + k
If x(j + 1) * 2 >= 10 Then
k = 1
Else
k = 0
End If
Next
If x(i) = 2 * x(1) + k Then
For s = 1 To i
Me.Tag = Me.Tag & x(s)
Next
MsgBox Me.Tag
Me.Tag = ""
End If
Next
Next
第一个结果:105263157894736842
速度很快,只要你愿意,可算出更长的来。
wyarrant 2002-04-19
  • 打赏
  • 举报
回复
263157894736842105
5263157894736842
不是巧合吧


wyarrant 2002-04-19
  • 打赏
  • 举报
回复
好像有个规律
就是从各位算起每位乘2得到前一位的数字过10进一

QQRN 2002-04-19
  • 打赏
  • 举报
回复
哇……大家都很聪明呀……
还有没有别的算法?
没有的话我要公布那个MM的解法了哦……
wyarrant 2002-04-19
  • 打赏
  • 举报
回复
解方程
m
19x/y+2=10
x=5263157894736842
y=1
m=17
是不是用matlab解方程的话好一些?
wyarrant 2002-04-19
  • 打赏
  • 举报
回复
52631578947368421
*2
pl5th2001 2002-04-19
  • 打赏
  • 举报
回复
算到程序未响应
CoolCHEN 2002-04-19
  • 打赏
  • 举报
回复
有个问题,超过long的题目怎么做?
比如求两个50位数的积??
请教!
hcyhero 2002-04-19
  • 打赏
  • 举报
回复
for i=0 to j
for j=0 to i
pl5th2001 2002-04-19
  • 打赏
  • 举报
回复
10000000以内没有
pl5th2001 2002-04-19
  • 打赏
  • 举报
回复
程序我编好了,不过long好象不够用,正在算
dgz01 2002-04-19
  • 打赏
  • 举报
回复
GUMP聪明
wuwutao 2002-04-19
  • 打赏
  • 举报
回复
修正:
Dim A As Double
Dim X As Integer
Dim N As Integer
Dim maxN As Integer
Dim dC As Double
Dim nC As Long
maxN = 20 '假设最多算至20位数
For N = 1 To maxN Step 1
dC = (10 ^ N - 2) / 19
nC = CLng(dC)
If dC - nC = 0 Then
For X = 2 To 9 Step 1
A = X * nC
'If Len(A) = N Then
'此处不应该判断长度,直接判断是否符合
'If 2*(A*10+X)=x*10^N+A then
MsgBox "Number=" & A & X
End If
Next X
End If
Next N
加载更多回复(45)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧