锁定老帖子 主题:一道关于Ruby的面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-13
gokure 写道 前几天面试了一家用Ruby on Rails开发网站的公司,前面接待后让填了个表和几道面试题,一共大概有6、7道题,都是算法与逻辑方面的,其中有一道大概是这样的:统计出从0-n之间1的个数,如n=13,f(0..13)=>6,0到13有6个数带有1,要求不能用字符串方式计算,只能用数学方式。我想了很久也没想出如何计算。
0到13有6个数带1吗,貌似只有5个啊,1,10,11,12,13,还有哪第6个数啊 java代码: import java.io.IOException; public class TestRuby { public static void main(String[] args){ try { long length=0; long n=System.in.read(); for(int i=1;i<=n;i++){ for(;;){ int k=i%10; if(k==1){ length++; break; } if(k==0)break; } } System.out.println(length); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
|
返回顶楼 | |
发表时间:2012-02-13
crazeee 写道 gokure 写道 前几天面试了一家用Ruby on Rails开发网站的公司,前面接待后让填了个表和几道面试题,一共大概有6、7道题,都是算法与逻辑方面的,其中有一道大概是这样的:统计出从0-n之间1的个数,如n=13,f(0..13)=>6,0到13有6个数带有1,要求不能用字符串方式计算,只能用数学方式。我想了很久也没想出如何计算。
0到13有6个数带1吗,貌似只有5个啊,1,10,11,12,13,还有哪第6个数啊 java代码: import java.io.IOException; public class TestRuby { public static void main(String[] args){ try { long length=0; long n=System.in.read(); for(int i=1;i<=n;i++){ for(;;){ int k=i%10; if(k==1){ length++; break; } if(k==0)break; } } System.out.println(length); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 数字11有两个1的 |
|
返回顶楼 | |
发表时间:2012-02-13
感谢大家的回复,令我是长进不少,回头做个Benchmark,还不清楚用哪种方式更灵活,性能更好。
|
|
返回顶楼 | |
发表时间:2012-02-13
最后修改:2012-02-13
gokure 写道 crazeee 写道 gokure 写道 前几天面试了一家用Ruby on Rails开发网站的公司,前面接待后让填了个表和几道面试题,一共大概有6、7道题,都是算法与逻辑方面的,其中有一道大概是这样的:统计出从0-n之间1的个数,如n=13,f(0..13)=>6,0到13有6个数带有1,要求不能用字符串方式计算,只能用数学方式。我想了很久也没想出如何计算。
0到13有6个数带1吗,貌似只有5个啊,1,10,11,12,13,还有哪第6个数啊 java代码: import java.io.IOException; public class TestRuby { public static void main(String[] args){ try { long length=0; long n=System.in.read(); for(int i=1;i<=n;i++){ for(;;){ int k=i%10; if(k==1){ length++; break; } if(k==0)break; } } System.out.println(length); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 数字11有两个1的 又仔细看了下题目,是统计1的个数,而不是含1的数字的个数 |
|
返回顶楼 | |
发表时间:2012-02-14
ilower 写道 gokure 写道 crazeee 写道 gokure 写道 前几天面试了一家用Ruby on Rails开发网站的公司,前面接待后让填了个表和几道面试题,一共大概有6、7道题,都是算法与逻辑方面的,其中有一道大概是这样的:统计出从0-n之间1的个数,如n=13,f(0..13)=>6,0到13有6个数带有1,要求不能用字符串方式计算,只能用数学方式。我想了很久也没想出如何计算。
0到13有6个数带1吗,貌似只有5个啊,1,10,11,12,13,还有哪第6个数啊 java代码: import java.io.IOException; public class TestRuby { public static void main(String[] args){ try { long length=0; long n=System.in.read(); for(int i=1;i<=n;i++){ for(;;){ int k=i%10; if(k==1){ length++; break; } if(k==0)break; } } System.out.println(length); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 数字11有两个1的 又仔细看了下题目,是统计1的个数,而不是含1的数字的个数 不好意思,题目没仔细看,修改好的代码: public class TestRuby { public static void ruby(int n){ long length = 0; for (int i = 1; i <= n; i++) { int k = i; for (;;) { if (k % 10 == 1) { length++; } k = k / 10; if (k == 0) break; } } System.out.println(length); } public static void main(String[] args) { ruby(14); } } |
|
返回顶楼 | |
发表时间:2012-02-16
最后修改:2012-02-17
小的献丑了
组合问题,就是有个n数,X位,当他全部为空小于n时候的,1放置的全部组合方法 假如是n<100 就是有当他是两位 () () 情况一: 第一空格可以放1 然后第二空格放0-9 情况二: 第一空格可以放0-9(去1) 然后第二空格放1 就可推出任何数的组合的公式:其实上面0到9数字的个数,是平均分布的。 记得几天前有个题目也是算 1.......n 的所有数,每个位分开后的数值。 一个求值一个是计数,类似的题目。 n=13 就更加简单,脑算就行了 1() ()有0-3可能 0() 有一种可能 一共6种 |
|
返回顶楼 | |
发表时间:2012-02-21
cttnbcj 写道 小的献丑了
组合问题,就是有个n数,X位,当他全部为空小于n时候的,1放置的全部组合方法 假如是n<100 就是有当他是两位 () () 情况一: 第一空格可以放1 然后第二空格放0-9 情况二: 第一空格可以放0-9(去1) 然后第二空格放1 就可推出任何数的组合的公式:其实上面0到9数字的个数,是平均分布的。 记得几天前有个题目也是算 1.......n 的所有数,每个位分开后的数值。 一个求值一个是计数,类似的题目。 n=13 就更加简单,脑算就行了 1() ()有0-3可能 0() 有一种可能 一共6种 这个方法应该是比较正确的,懂得用数值算法来计算 |
|
返回顶楼 | |
发表时间:2012-05-04
chloerei 写道 def f(range) range.inject do |sum, n| while n > 0 sum += 1 if n % 10 == 1 n = n / 10 end sum end end 我本地运行了一下,好像结果不对吧。 f(2..5) => 2 ? 应该是0吧。。 我也是新学的ruby,环境是ruby 1.9.2p290 (2011-07-09) [i386-mingw32]。 |
|
返回顶楼 | |
发表时间:2012-05-05
shmiya 写道 chloerei 写道 def f(range) range.inject do |sum, n| while n > 0 sum += 1 if n % 10 == 1 n = n / 10 end sum end end 我本地运行了一下,好像结果不对吧。 f(2..5) => 2 ? 应该是0吧。。 我也是新学的ruby,环境是ruby 1.9.2p290 (2011-07-09) [i386-mingw32]。 def f(range) range.inject 0 do |sum, n| while n > 0 if n % 10 == 1 sum += 1 break end n = n / 10 end sum end end p f 2..11 那位的代码有一点小的疏忽..这就改对了 |
|
返回顶楼 | |
发表时间:2012-05-09
零++ 写道 shmiya 写道 chloerei 写道 def f(range) range.inject do |sum, n| while n > 0 sum += 1 if n % 10 == 1 n = n / 10 end sum end end 我本地运行了一下,好像结果不对吧。 f(2..5) => 2 ? 应该是0吧。。 我也是新学的ruby,环境是ruby 1.9.2p290 (2011-07-09) [i386-mingw32]。 def f(range) range.inject 0 do |sum, n| while n > 0 if n % 10 == 1 sum += 1 break end n = n / 10 end sum end end p f 2..11 那位的代码有一点小的疏忽..这就改对了 f(0..13)结果应该是6,你的是5。原因是11算两个1 以下是我的代码,比较丑,不够ruby,呵呵。 def f(range) count = 0 range.each do |i| n = i while (n >= 10) m = n % 10 count += 1 if m == 1 n = n / 10 end count += 1 if n == 1 end count end |
|
返回顶楼 | |