Facebook黑客杯:勤奋好学的学生问题

时间:2011-01-16 06:47:03

标签: perl

在资格赛期间,提出了以下问题:

  

你已经获得了一系列要学习和记忆的单词。作为一个勤奋的语言和艺术学生,你决定不学习它们,而是根据它们制作毫无意义的游戏。你想出的一个游戏是看你如何连接单词以生成字典上最低的字符串。

     

输入

     

作为玩这个游戏的输入,你将收到一个包含整数N的文本文件,你需要玩游戏的单词数量。接下来是N个单词集,每个单词集以整数M开始,集合中的单词数,后跟M个单词。输入中的所有标记将由一些空格分隔,除了N和M之外,它将完全由小写字母组成。

     

输出

     

您的提交应包含按字典顺序排列的最短字符串   每个对应的单词集,每行一个顺序。

     

约束

1 <= N <= 100
1 <= M <= 9
1 <= all word lengths <= 10
  

示例输入

5
6 facebook hacker cup for studious students
5 k duz q rc lvraw
5 mybea zdr yubx xe dyroiy
5 jibw ji jp bw jibw
5 uiuy hopji li j dcyi
  

示例输出

cupfacebookforhackerstudentsstudious
duzklvrawqrc
dyroiymybeaxeyubxzdr
bwjibwjibwjijp
dcyihopjijliuiuy

我写的程序如下:

chomp($numberElements=<STDIN>);  

for(my $i=0; $i < $numberElements; $i++)  
{  
   my $string;  
   chomp ($string = <STDIN>);  
   my @array=split(/\s+/,$string);  
   my $number=shift @array;  
   @sorted=sort @array;    
   $sortedStr=join("",@sorted);    
   push(@data,$sortedStr);  
}  

foreach (@data)  
{  
  print "$_\n";  
}  

该程序为给定的测试用例提供了正确的输出,但Facebook仍然显示它是不正确的。这个程序有什么问题吗?

4 个答案:

答案 0 :(得分:4)

1
2 ba b

您的程序输出bba,这是不正确的。 bab早先按字典顺序排列。

答案 1 :(得分:0)

这是一个ruby程序。 由于这是一个快速的10分钟黑客,我没有比较性能。

biginput = [
  ['facebook', 'hacker', 'cup', 'for', 'studious', 'students'],
  ['k', 'duz', 'q', 'rc', 'lvraw'],
  ['mybea', 'zdr', 'yubx', 'xe', 'dyroiy'],
  ['jibw', 'ji', 'jp', 'bw', 'jibw'],
  ['uiuy', 'hopji', 'li', 'j', 'dcyi'],
  ['ba', 'b']
  ]

biginput.each do |input|
  out = ""

  input.each do |word|
    word << word[0]
  end

  input.sort!
  # puts temp.inspect
  input.each do |res|
    out << res[0..-2]
  end


  puts out
end

答案 2 :(得分:0)

#!/usr/bin/env perl 

while (<DATA>) {
    chomp;
    my($num_words, @words) = split /\s+/;
    my @sorted_words = sort @words;
    $" = '';
    print @sorted_words, "\n";
}

__DATA__
6 facebook hacker cup for studious students
5 k duz q rc lvraw
5 mybea zdr yubx xe dyroiy
5 jibw ji jp bw jibw
5 uiuy hopji li j dcyi
2 ba b

答案 3 :(得分:0)

String [] student = {"jibw","ji","jp","bw","jibw"};
    Arrays.sort(student, new Comparator<String>(){

        @Override
        public int compare(String s1, String s2) {
            return (s1+s2).compareTo(s2+s1);
        }
    });
    for(int i=0;i<student.length;i++)
        System.out.print(student[i]+" ");

答案是:bwjibwjibwjijp。如果你只是排序和连接答案将是bwjijibwjibwjp这是不正确的。