LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 739|回复: 7

一个Perl 的 '九九表'  谁能再把它优化一下。

[复制链接]
发表于 2005-5-12 14:04:38 | 显示全部楼层 |阅读模式
for (1..9) {
   $tp=1;
       while(1) {
       printf "$_*$tp=%2d",$tp*$_;
       if ($tp==$_) {
         print "\n"; last;
       } else {print " ";}
       $tp++;
      }
}
发表于 2005-5-13 20:41:59 | 显示全部楼层

  1. my @array=(1..9);
  2. foreach my $gh(@array){
  3.         map{print "$gh*$_=",$gh*$_,"\t" unless($gh < $_)}(1..9);
  4. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-13 21:30:16 | 显示全部楼层
没什么好优化的了
这个算法的复杂度就是这个反正是要打印9*(1+9)/2次,再怎么优化也得打印这么多次
回复 支持 反对

使用道具 举报

发表于 2005-5-13 22:45:53 | 显示全部楼层
  1. for (1..9) {
  2.         for ($i=1;$i<=$_;$i++) {
  3.                 printf "$_*$i=%2d ",$_*$i;
  4.         }
  5.         print "\n";
  6. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-13 22:47:33 | 显示全部楼层

  1. my @array=(1..9);
  2. foreach my $gh(@array){
  3.         map{print "$gh*$_=",$gh*$_,"\t" unless($gh < $_)}(1..9);
  4. }
复制代码

输出格式有问题呐
回复 支持 反对

使用道具 举报

发表于 2005-5-13 23:04:22 | 显示全部楼层
这个可以:

  1. foreach my $a(1..9){
  2.         map{printf "$a*$_=%2d ",$a*$_ unless($a<$_);print "\n" if($a==$_);}(1..9);
  3. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-15 14:46:03 | 显示全部楼层
贴一段ruby

  1. 1.upto(9) do |i|
  2.         1.upto(i) {|j| print(i.to_s + "*" + j.to_s + "=" + (i*j).to_s + " ")}
  3.         puts ""
  4. end
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-16 11:56:18 | 显示全部楼层
代码比楼主的简洁,不过没有及时跳出内循环。
吹毛求疵一下,呵呵。

Post by aaccdd
这个可以:

  1. foreach my $a(1..9){
  2.         map{printf "$a*$_=%2d ",$a*$_ unless($a<$_);print "\n" if($a==$_);}(1..9);
  3. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表