免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yzc2002
打印 上一主题 下一主题

据说是google的面试题,看谁的快 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-03-29 14:30 |只看该作者

回复 6楼 mingjwan 的帖子

这道题答出来不难,关键是效率,楼主比较厉害,很快就算出来了

论坛徽章:
0
12 [报告]
发表于 2006-03-29 14:40 |只看该作者
没想出什么好方法

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2006-03-29 15:39 |只看该作者
练练手:
In Haskell:
  1. module Main where

  2. g y x = x + case y of
  3.             { '1' -> 1; _ -> 0 }
  4. f 1 = 1
  5. f (x+1) = f(x) + foldr (g) 0 (show(x+1))

  6. h x = do
  7.         if x == f(x)
  8.             then
  9.                 putStrLn( show(x) ++ ":" ++ show( f(x) ) )
  10.             else
  11.                 putStr( "" )
  12.         h(x+1)

  13. main = h 1
复制代码

其实最核心的也就这四行:
  1. g y x = x + case y of
  2.             { '1' -> 1; _ -> 0 }
  3. f 1 = 1
  4. f (x+1) = f(x) + foldr (g) 0 (show(x+1))
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2006-03-29 16:50 |只看该作者
唔……Haskell 学的不好,上面那个程序太慢了,
下面换个 Python 的,这个应该快一些:
  1. i=1
  2. sum=0

  3. while 1:
  4.     count = str(i).count("1")
  5.     sum += count
  6.     if sum == i:
  7.         print sum
  8.     i += 1
复制代码


Perl 的语法和 Python 差不多,不过速度应该会快一些:
  1. $i=0;
  2. $sum=0;
  3. while(1){
  4.     $count = $i =~ s/1/1/g;
  5.     $sum += $count;
  6.     print "$i\n" if $i == $sum;
  7.     $i++;
  8. }
复制代码

[ 本帖最后由 flw 于 2006-3-29 16:54 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2006-03-29 16:52 |只看该作者
flw,这个问题考算法,不是考的语言吧...哈哈

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2006-03-29 16:57 |只看该作者
原帖由 converse 于 2006-3-29 16:52 发表
flw,这个问题考算法,不是考的语言吧...哈哈

版主不会出错,出错的永远是实习版主,出了问题请先从自己身上考虑自己是不是犯错了

论坛徽章:
0
17 [报告]
发表于 2006-03-29 17:01 |只看该作者
原帖由 converse 于 2006-3-29 16:52 发表
flw,这个问题考算法,不是考的语言吧...哈哈

是不是应该从数本身规律考虑,好多数不用测试的
<10    1
<100   11 12 13 14...21 31 41 51....
<1000 101 111 112 113 ....121 131...
今天回家再仔细想想

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
18 [报告]
发表于 2006-03-29 17:04 |只看该作者
还有个问题,什么叫做“下一个最大的”?
难道这个是有最大值的?

论坛徽章:
0
19 [报告]
发表于 2006-03-29 17:06 |只看该作者
原帖由 flw 于 2006-3-29 17:04 发表
还有个问题,什么叫做“下一个最大的”?
难道这个是有最大值的?

恩,这个确实是个BUG

论坛徽章:
0
20 [报告]
发表于 2006-03-29 17:08 |只看该作者
原帖由 flw 于 2006-3-29 16:50 发表
唔……Haskell 学的不好,上面那个程序太慢了,
下面换个 Python 的,这个应该快一些:
[code]i=1
sum=0

while 1:
    count = str(i).count("1")
    sum += count
    if sum == i:
       ...

这两个还差不多能看懂个70%,前面那个完全不明白是啥~~~
flw你会那么多的语言,不会搞混了么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP