LinuxSir.cn,穿越时空的Linuxsir!

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

我也来求算法

[复制链接]
发表于 2004-6-15 15:36:59 | 显示全部楼层 |阅读模式

  1. 打印:

  2.                                 1
  3.                            1         1
  4.                      1         1         1
  5.                            1         1
  6.                                  1

复制代码
 楼主| 发表于 2004-6-15 15:38:59 | 显示全部楼层

没对齐,再来一下


  1.                                 1
  2.                         1                1
  3.                 1                1                1
  4.                         1                1
  5.                                 1
复制代码
发表于 2004-6-15 15:44:04 | 显示全部楼层
穷举法
发表于 2004-6-15 17:44:54 | 显示全部楼层
[php]
#!/usr/bin/perl -w
use POSIX;
open FP, ">log.txt";
select(FP);
sub print_line
{
    my($line, $dim, $col) = @_;
    $col = $col|| 80; #the terminal width, default 80 characters.
    return if($col > 80);
    my $count = ceil($col/2)-$line;
    print " " x $count, '1 ' x $line, "\n";
}
my $dim = 11;
for(my $i=1; $i <= ceil($dim/2); $i++){
    print_line($i, $dim);
}
for(my $i=floor($dim/2); $i>0; $i--){
    print_line($i, $dim);
}
close(FP);
[/php]
输出:

  1.                                        1
  2.                                       1 1
  3.                                      1 1 1
  4.                                     1 1 1 1
  5.                                    1 1 1 1 1
  6.                                   1 1 1 1 1 1
  7.                                    1 1 1 1 1
  8.                                     1 1 1 1
  9.                                      1 1 1
  10.                                       1 1
  11.                                        1
复制代码
 楼主| 发表于 2004-6-16 10:04:03 | 显示全部楼层
看不懂,有没有用C写的?
发表于 2004-6-16 10:57:18 | 显示全部楼层
改成C++的,呵呵

  1. #include <iostream>
  2. #include <cstdlib>

  3. using namespace std;
  4. void print_line(int line, int dim, int col=80)
  5. {
  6.     //the terminal width, default 80 characters.
  7.     if(col > 80)
  8.         return ;  
  9.     int i = 0;
  10.     for(i=0; i< ceil(col/2.0)-line; i++)
  11.         cout<<" ";
  12.     for(i=0; i<line; i++)
  13.         cout<<"1 ";
  14.    
  15.     cout << endl;
  16. }


  17. int main(int argc, char *argv[])
  18. {
  19.   int dim = 11;
  20.   cout << "Input the dimensions: ";
  21.   cin >> dim;
  22.   int i = 1;
  23.   for(i=1; i <= ceil(dim/2.0); i++){
  24.       print_line(i, dim);
  25.   }
  26.   for(i=dim/2; i>0; i--){
  27.       print_line(i, dim);
  28.   }       
  29.   return 0;
  30. }
复制代码
发表于 2004-6-16 14:45:31 | 显示全部楼层

  1. ---222.c--------------------------------------


  2. main(){
  3. printf("\
  4.                                1\n\
  5.                            1         1\n\
  6.                      1         1         1\n\
  7.                            1         1\n\
  8.                                  1\n");
  9. }


复制代码
 楼主| 发表于 2004-6-21 13:55:38 | 显示全部楼层
谢谢 pupilzeng,  很好
 楼主| 发表于 2004-6-21 14:08:46 | 显示全部楼层
好象有点问题, 打印出来得最长那一行的1的个数应该等于输入的数,也许我的题目没写明白:


  1. 输入1:
  2.                         1
  3. 输入2:
  4.                         1
  5.                 1                1
  6.                         1
  7.         而不是
  8.                         1
  9.                         1

  10. 输入3:
  11.                         1
  12.                 1                1
  13.         1                1                1
  14.                 1                1       
  15.                         1
  16.         而不是:
  17.                         1
  18.                 1                1
  19.                         1
复制代码
 楼主| 发表于 2004-6-21 14:11:59 | 显示全部楼层
对输入数做 2n-1处理就符合了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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