字体:  

这道试题改怎么做

neu21 发表于: 2008-11-12 17:25 来源: Ruby Community

【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
      掉不满足条件的排列。
2.程序源代码:
main()
{
int i,j,k;
printf("\n");
for(i=1;i<5;i++)    /*以下为三重循环*/
 for(j=1;j<5;j++) 
  for (k=1;k<5;k++)
   {
    if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/
    printf("%d,%d,%d\n",i,j,k);
   }
}
这道c的题用ruby怎么实现呢
谢谢

最新回复

boblu at 2008-11-13 13:11:53

CODE:

#! /usr/bin/ruby
numbers = [1,2,3,4]
all_candidates = []

numbers.each{|hundred|
  temp_1 = numbers.dup
  temp_1.delete(hundred)
  temp_1.each{|ten|
    temp_2 = temp_1.dup
    temp_2.delete(ten)
    temp_2.each{|one| all_candidates << (hundred.to_s + ten.to_s + one.to_s).to_i}
  }
}

all_candidates = all_candidates.uniq.sort
puts all_candidates.join("\t")
neu21 at 2008-11-14 11:16:34
我怎么感觉有点做的麻烦了呢
boblu at 2008-11-17 16:20:22
我在写得时候也是觉得用dup有点别扭。
如果有好的方法,请楼主指教。
neu21 at 2008-11-19 19:57:21
我又想了个类似c的方法,这样做可能更简洁些。

CODE:

for a in 1..4
  for b in 1..4
    for c in 1..4
      if (a!=b)&(b!=c)&(a!=c)
        puts a.to_s+b.to_s+c.to_s
      end
      end
      end
      end