论坛首页 招聘求职论坛

一道关于Ruby的面试题

浏览 21920 次
精华帖 (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();
}
}
}
0 请登录后投票
   发表时间: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的
0 请登录后投票
   发表时间:2012-02-13  
感谢大家的回复,令我是长进不少,回头做个Benchmark,还不清楚用哪种方式更灵活,性能更好。
0 请登录后投票
   发表时间: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的数字的个数
0 请登录后投票
   发表时间: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);
}
}
0 请登录后投票
   发表时间: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种
0 请登录后投票
   发表时间: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种

这个方法应该是比较正确的,懂得用数值算法来计算
0 请登录后投票
   发表时间: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]。
0 请登录后投票
   发表时间: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

那位的代码有一点小的疏忽..这就改对了
0 请登录后投票
   发表时间: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

0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics