德国开元华人社区 开元周游

标题: 谁讲道题,*画圣诞树的。。。 [打印本页]

作者: 北京的争争    时间: 22.12.2009 20:19
标题: 谁讲道题,*画圣诞树的。。。
Schreiben Sie eine Methode static void printBaum(int hoehe, int breite, int
stamm, char zeichen). Diese Methode soll einen Weihnachtsbaum ausgeben, der aus
dem Zeichen zeichen besteht, hoehe Zeilen besitzt und – beginnend mit einem Zeichen
– in jeder Zeile links und rechts breite Zeichen erg¨anzt. Der Baumstamm soll zentriert
in der Mitte ausgeben haben und die H¨ohe stamm haben. So sollen z.B. die Aufrufe
von printBaum(4,2,3,’*’) und printBaum(3,1,4,’J’) zu den folgenden Ausgaben
f¨uhren:


           *                                   J
       *****                               JJJ
    *********                          JJJJJ
*************                         J
           *                                    J
           *                                    J
           *                                    J
作者: yellowbee    时间: 22.12.2009 20:54
(4,2,3,'*')

第一个参数是树冠有几行,
第二个参数是每增加一行要增加2的n倍数量的符号,比如左边星号每次增加2^2=4个,右边增加2^1=2个,
第三个参数是树干有几行,

没明白的是为何右图的树干第一行在最左侧。

不知道我有没有理解对,至于打印本身很简单,建个数组就可以实现。
作者: 北京的争争    时间: 22.12.2009 23:11
本帖最后由 北京的争争 于 23.12.2009 00:25 编辑

题目我也懂。就是写不完整。写个prozedur,然后用两个for schleife?

我就是总写不全,因为不会正确的走完没行变化。




class Weihnachtsbaum{
   static void printBaum (int hoehe, int breite, int
stamm, char zeichen) {
for(int i=0; i<hoehe; i++) {
    for(int j=0; j<= ( (hoehe-1)*breite*2+1); j++) {
  if ( i>0 && (j >= (hoehe-1)*breite+1-i*j &&
j <= (hoehe-1)*breite+1+i*j) )
     System.out.print(zeichen);
  else if(i==0 && j==(hoehe-1)*breite+1)
     System.out.print(zeichen);
  else
     System.out.print(" ");
    }
    System.out.println();
}
for(int a = hoehe; a>=hoehe && a< stamm; a++){
    for(int b=0; b<= ( (hoehe-1)*breite*2+1); b++){
       if(b==(hoehe-1)*breite+1)
  System.out.print(zeichen);
    }
    System.out.println();
}
}

   public static void main(String args []){
   char c = '*';
   int ho = 4;
   int br = 2;
   int st = 3;
   printBaum(4,2,3,'*');
   }
}
作者: sos_terrorist    时间: 23.12.2009 00:56
来学习下
作者: 北京的争争    时间: 23.12.2009 02:04
谁帮帮哦。。。改改错误~
作者: taohui    时间: 23.12.2009 06:41
树冠符号数量是:1+(2^breite)*n (n从0开始,  n<hoehe)
最大宽度是:1+(2^breite)*(hoehe-1)
这些条件组合一下应该能写简洁些。
如果是打印在网页上就好了,几行代码就可以搞定
作者: 北京的争争    时间: 23.12.2009 11:55
class Weihnachtsbaum{

   static void printBaum (int hoehe, int breite, int
stamm, char zeichen) {

        for(int i=0; i<hoehe+stamm; i++) {
           for(int j=0; j<= ( (hoehe-1)*breite*2+1); j++) {
                if ( i>0 && i<hoehe && (j >= (hoehe-1)*breite+1-i*j && j <= (hoehe-1)*breite+1+i*j) )
                   System.out.print(zeichen);
                else if( (i==0 || i>=hoehe) && j==(hoehe-1)*breite+1)
                   System.out.print(zeichen);
                else
                   System.out.print(" ");
           }
           System.out.println();
        }
}


   public static void main(String args []){
   char c = '*';
   int ho = 4;
   int br = 2;
   int st = 3;

   printBaum(4,2,3,'*');

   }
}


出来的还是不完全对。没行最后不对。
作者: 北京的争争    时间: 23.12.2009 12:19
2^breite 你是说2*breite 吧
作者: taohui    时间: 23.12.2009 14:26
应该是乘以和次方都对吧
作者: taohui    时间: 23.12.2009 15:15
回复 1# 北京的争争


    楼主对这个感兴趣,我写了个可以输入的,直接这个链接进去测试:http://vip.bianyou.com/test.php
代码如下:
  1. printTree($hoehe, $breite, $stamm, $zeichen);
  2. function printTree($hoehe, $breite, $stamm, $zeichen)
  3. {
  4.         $width = 1+(2*$breite)*($hoehe-1);
  5.         $height = $hoehe+$stamm;
  6.         for($i=0; $i<$height; $i++)
  7.         {
  8.                 if($i<$hoehe)
  9.                 {
  10.                         $sign_num = 1+(2*$breite)*$i;
  11.                 }
  12.                 else
  13.                 {
  14.                         $sign_num = 1;
  15.                 }
  16.                 $blank_num = ($width-$sign_num)/2;
  17.                 printRow($blank_num, $sign_num, $zeichen);
  18.         }
  19. }
  20. function printRow($blank_num, $sign_num, $zeichen)
  21. {
  22.         for($i=0; $i<$blank_num; $i++)
  23.         {
  24.                 echo ' ';
  25.         }
  26.         for($i=0; $i<$sign_num; $i++)
  27.         {
  28.                 echo $zeichen;
  29.         }
  30.        echo "\n";
  31. }
复制代码

作者: 北京的争争    时间: 23.12.2009 16:40
太强了。。。这个是c么
作者: 有容乃大    时间: 23.12.2009 23:50
赞一个
作者: taohui    时间: 24.12.2009 02:44
回复 11# 北京的争争


    这个没有用任何额外的函数,所以只要略微修改一下语法适用于任何程序。




欢迎光临 德国开元华人社区 开元周游 (https://forum.kaiyuan.de/) Powered by Discuz! X3.2