0

前回ここにいたとき、コンピュータサイエンスの宿題で助けが必要な唯一の質問は、100行に直角三角形を作成することでした。そのためのコードは次のとおりです。

    public class PrintTriangle {
   public static void main(String[] args) {
      // Print a right triangle made up of *
      // starting at 100 and ending with 1
         int i = 100;
         while (i > 0) {
           for (int j = 0; j < i; j++)
           System.out.print("*");
           System.out.println();
         i--;
         }
   }
}

さて今、彼は私たちに逆をするように頼まれました。これが実際の質問です:

"次の形で100行の直角三角形を描画するプログラムを作成します。最初の行、印刷100' '、2番目の行、99' ' ...最後の行、1つだけ'*'。forループの使用この問題の場合。プログラムにPrintTriangle.javaという名前を付けます。 "

 *****
  ****
   ***
    **
     *

簡単なことだと思いますが、これまでに試したすべてのことは、フロップするか、一度に1つのスペースしか作成しませんでした。任意の提案や助けをいただければ幸いです!前もって感謝します!

4

8 に答える 8

2

OK、最初に両方の問題を見てみましょう。それらをどのように関連付けますか。

2番目の問題は最初の問題の逆であるため、最初のコードで最初に行ったことは、この次の問題で最後に行う必要があります。

したがって、ループは実際には、以下のコードで終了した場所で逆方向に機能するはずです。

int i = 100;
for (int j = 0; j < i; j++)
           System.out.print("*");

したがって、このループを逆方向に機能させるために何をする必要があるかを考えてください。

ヒント:-

  • 0から100へのインクリメントは順方向です
  • 100から0へのデクリメントは逆方向です

    ****  
     ***  
      **
       *  
    

spacesまた、上記のパターンでは、実際に印刷する前に最初に印刷する必要があることがわかります。charactersしたがって、それも考慮する必要があります。

したがって、ここでは実際に2つの異なる文字を印刷する必要があります。

  • いくつかSpaces、続いて、
  • いくつか*'s

パターンは次のとおりです。-

  • 最大行はmax(あなたの場合は100)です。
  • 行(i)には(i)の数がありspacesます(行0には0スペース、行1には1スペース)
  • 次に、(n - i)の数がありstarsます(行0には100個の星があり、行1には99個の星があります)

twoしたがって、ここで実際にループが必要であることがわかります。

私が言ったことをすべて分析し、いくつかのコードを考え出します。やってみよう。

于 2012-10-13T17:53:29.447 に答える
0
 int i = 1;
 while (i =< 100) {
   // first put spaces as long as it is necessary
   // it will be i times less than 100
   // for example for the first line (i = 1), 99 space (100-i) and 1 star (i)
   // for the 50. line (i == 50), 50 space (100-i) and 50 stars (i)
   for(int j = 0; j < 100-i; j++)
     System.out.print(" ");

   // then the stars
   for (int j = 0; j < i; j++)
     System.out.print("*");
   System.out.println();
   i++;
 }
于 2012-10-13T18:00:40.813 に答える
0

これらの種類のピラミッド(私がそれらと呼んでいるもの)の場合、最初にスペースが正しいことを確認してください

* * * * *
- * * * *
- - * * *
- - - * * 
- - - - *

これで2つのパターンが表示され、プログラムできるようになりました。これが擬似コードです...

FOR I=1 to N
    FOR J = 1 to I-1
        PRINT " "
    ENDFOR
    FOR K = 1 to N-I+1
        PRINT "*"
    ENDFOR
PRINT "\n"
ENDFOR
于 2012-10-13T17:59:12.747 に答える
0
public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            for (int j = 0; j < i; j++)
                System.out.print(" ");
            for (int j = i; j < 100; j++)
                System.out.print("*");
            System.out.println();
        }
    }
}
于 2012-10-13T17:54:01.423 に答える
0

私はあなたがそれをどのように行うことができるかについてあなたに考えを与えているだけです。パターンを理解します。

前の質問で印刷された*と同じように、スペースを印刷する必要があります。次に、星を逆の順序で印刷します。

*
**
***

***
 **
  *
于 2012-10-13T17:54:48.537 に答える
0

以下のコードは、解決策を見つけるのに役立ちます。

 class ReverseTriangle {
 public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < i; j++)
            System.out.print(" ");
        for (int j = i; j < 100; j++)
            System.out.print("*");
        System.out.println();
    }
 }
 }
于 2012-10-13T19:24:23.060 に答える
0
public class PrintTriangle {
   public static void main(String[] args) {

       for(int i=10;i>0;i--)
          {
           for (int j = 1; j < i; j++)
           System.out.print("*");
           System.out.println();           
         }
   }
}
于 2013-10-13T12:10:10.433 に答える
0
public static void printPyramid(int ln){
    for(int j=ln;j>0;j--){
        for(int i=ln;i>0;i--) {
            if (j >= i) {
                System.out.print("*");
            } else {
            }
            System.out.print(" ");
        }
        System.out.println();
    }
}

public static void printReversePyramid(int ln){
    for(int j=0;j<ln;j++){
        for(int i=ln;i>=0;i--) {
            if (j >= i) {
                System.out.print("*");
            } else {
            }
            System.out.print(" ");
        }
        System.out.println();
    }
}

public static void printDiamond(int ln){
    for(int j=0;j<2*ln+1;j++){
        for(int i=ln;i>=0;i--) {
            if (j >= i && j < ln+1) {
                System.out.print("*");
            } else if(j > ln && (2*ln)-j>=i){
                System.out.print("*");
            }
            else {
            }
            System.out.print(" ");
        }
        System.out.println();
    }
}
于 2013-12-12T03:28:12.987 に答える