开元周游
德国频道
查看: 2120|回复: 12
打印 上一主题 下一主题

[互联网] 谁讲道题,*画圣诞树的。。。

[复制链接]
跳转到指定楼层
1#
发表于 22.12.2009 20:19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
2#
发表于 22.12.2009 20:54:50 | 只看该作者
(4,2,3,'*')

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

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

不知道我有没有理解对,至于打印本身很简单,建个数组就可以实现。
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 22.12.2009 23:11:01 | 只看该作者
本帖最后由 北京的争争 于 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,'*');
   }
}
回复 支持 反对

使用道具 举报

4#
发表于 23.12.2009 00:56:24 | 只看该作者
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 23.12.2009 02:04:11 | 只看该作者
回复 支持 反对

使用道具 举报

6#
发表于 23.12.2009 06:41:00 | 只看该作者
树冠符号数量是:1+(2^breite)*n (n从0开始,  n<hoehe)
最大宽度是:1+(2^breite)*(hoehe-1)
这些条件组合一下应该能写简洁些。
如果是打印在网页上就好了,几行代码就可以搞定

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 23.12.2009 11:55:39 | 只看该作者
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,'*');

   }
}


出来的还是不完全对。没行最后不对。
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 23.12.2009 12:19:23 | 只看该作者
回复 支持 反对

使用道具 举报

9#
发表于 23.12.2009 14:26:22 | 只看该作者
回复 支持 反对

使用道具 举报

10#
发表于 23.12.2009 15:15:52 | 只看该作者
回复 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. }
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

站点信息

站点统计| 举报| Archiver| 手机版| 小黑屋

Powered by Discuz! X3.2 © 2001-2014 Comsenz Inc.

GMT+1, 29.12.2024 11:27

关于我们|Apps

() 开元网

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