2011-11-01 37 views
-4

哪一個代碼會更快? 我一直在嘗試一些有問題的社區網站。 對於我提交了兩個解決方案的問題。 我的第一個解決方案被接受了,但另一個被拒絕了。優化perl代碼的問題之一?

#INPUT consist of two integer ie 5 10 
# 23 200 
# Solution 1 (accepted) 

@_ = split(/\s/,<>); 

if ($_[0]%5 != 0) { 
    $_[1] = sprintf("%.2f",$_[1]); 
    print $_[1]; 
    exit; 
} 
if ($_[0]+0.5 > $_[1] ) { 
    $_[1] = sprintf("%.2f",$_[1]); 
     print $_[1]; 
     exit; 
} 

$_[1] = sprintf("%.2f",($_[1] - ($_[0]+.5))); 
print $_[1]; 

或者

#Solution 2 (rejected) 

@_ = split(/\s/,<>); 

if ($_[0]%5 != 0) { 
    print (sprintf("%.2f",$_[1])); 
    exit; 
} 
if ($_[0]+0.5 > $_[1] ) { 
    print (sprintf("%.2f",$_[1])); 
exit; 
} 

print (sprintf("%.2f",$_[1])); 
+2

如果你想知道一些代碼是多快的話,那麼[benchmark](http://modperlbook.org/html/9-2-Perl-Code-Benchmarking.html)就可以了。不要問我們。 – Quentin

+0

難道他們不會教人們如何計時代碼嗎? (提示:'時間') –

+1

我不會拒絕使用'print(sprintf(...))'而不是'printf'的代碼,但誘惑肯定會在那裏。 – tripleee

回答

2

你的第二個變化是稍快,但它並不意味着任何真正的區別。

由於代碼質量差,我會拒絕這兩個解決方案 - 您應該開始命名您的變量。另外,瞭解elsif/else並使用它們而不是退出。