4

1 つのループを使用してこのパターンを印刷しました。

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

String s = "";
for (i = 1; i <= n; ++i) {
    s += "*";
    System.out.println(s);
}

ここで、ループを 1 つだけ使用して次のパターンを印刷する方法が必要です。

1)
    *
   * *
  * * *
 * * * *
* * * * *

2)
  * * * * * 
   * * * *
    * * *
     * *
      *

3)
   1 2 3 4 5
   1 2 3 4
   1 2 3 
   1 2
   1

および1つのループのみを使用する他の同様のパターン、複数のループを使用してそれらすべてを実行しました。

4

11 に答える 11

6

I want optimization. The time complexity of two loops will be O(n^2) whereas for only one loop it will be O(n). And O(n) < O(n^2).

You realise that 99.999% of the time will be spent updating the console. If you want to save time, don't write anything. The time taken to loop is trivial by comparison.

BTW The number of stars you produce will be O(N^2) so the time complexity with be O(N^2) whether you use 1, 2 or 3 loops.

于 2012-12-18T16:30:00.190 に答える
3

次のコードは、単一ループを使用してダイヤモンド形状を出力します。それに応じてサイズ変数の値を変更できます。

import java.util.Arrays;

class DiamondShapeUsingSingleLoop{
    public static void main(String args[]){
        int size = 5;
        for(int rowNumber = -size +1 ; rowNumber < size ; rowNumber++){
            char row[] = new char[2*size - Math.abs(rowNumber) - 1];
            Arrays.fill(row,0,Math.abs(rowNumber),' ');
            Arrays.fill(row,Math.abs(rowNumber), row.length,'*');
            System.out.println(String.valueOf(row));
        }
    }
}

出力は次のとおりです。

    *                                                                                                                                                           
   ***                                                                                                                                                          
  *****                                                                                                                                                         
 *******                                                                                                                                                        
*********                                                                                                                                                       
 *******                                                                                                                                                        
  *****                                                                                                                                                         
   ***                                                                                                                                                          
    *
于 2017-04-27T10:26:51.940 に答える
1
    *
   * *
  * * *
 * * * *
* * * * *

いくつかの要件を書きます - そうすれば解決策が明確になります:

  • 反復0で、位置4に1 "* "シーケンスを出力します
  • 反復1で、位置3に2 つ "* "のシーケンスを出力します
  • 反復2で、位置2に3 つ "* "のシーケンスを出力します
  • 反復3で、位置1に4 つ "* "のシーケンスを出力します
  • 反復4で、位置0に5 つ "* "のシーケンスを出力します
于 2012-12-18T16:35:55.793 に答える
0

You can print diamond,by using only one loop and if you want to print pyramid use half logic of this program

import java.util.Scanner;
class DiamandOneLoop {

    public static void main(String arg[]){
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the row Diamond Size");
        int n=sc.nextInt();
        String numSp="                                                                   ";
        String spaceAdd=numSp.substring(0,n-1);
        StringBuilder space=new StringBuilder(spaceAdd);
        StringBuilder star=new StringBuilder("* ");

        for(int i=1;i<=n*2-1;i++){
            if(i<n){
                System.out.print(space);
                space.delete(0,1);
                System.out.println(star);
                star.append("* ");
            }
            if(i==n){
                System.out.println(star);
            }
            if(i>n){
                space.append(' ');
                System.out.print(space);
                star.delete(0,2); 
                System.out.println(star);
            }
        }
    }
} 
于 2016-11-17T10:46:04.973 に答える
0

int 列 = 1; int スペース = 4;

   for(int i=1;i<=5;i++){
       for(int j=1;j<=space;j++){
           System.out.print(" ");

    }
       space--;

    for(int j=1;j<=col;j++){
    System.out.print("*");
        }
    System.out.println();
    col=col+2;
于 2013-10-02T19:53:14.637 に答える
0

これがcの解決策です

#include<iostream>
using namespace std;
int main(){
    int n=15;
    int x=1;
    int j=1;
    for(int i=1;x<=n; )
    {

        if(!(j<=i))
        {
            cout<<endl;
            j=1;
            i++;
        }
        else
        {
            cout<<"*";
            x++;
            j++;
        }

    }
}

お気軽にお尋ねください

于 2018-04-11T20:03:37.577 に答える
-1

最適化したい。2つのループの時間計算量はO(n ^ 2)になりますが、1つのループのみの場合はO(n)になります。そして、O(n)<O(n ^ 2)。

最適な解決策はループがないことでしょうか?

System.out.println("     *\n    * *\n   * * *\n  * * * *\n* * * * *");

本当に1つのループでこれを実行したい場合は、コンマ演算子と文字列format()およびreplace()メソッドの力を使用できます。

int j = triangle_levels - 1; // triangle_levels is some int you can make 5, but this 
                             // is more generic
for(int i = 0; i < triangle_levels; j--, i++) {
    System.out.println("%" + j + "s", " ");
    System.out.println("%0" + (i+1) + "d", 0).replace("0", "* "));
}

これにより、2番目のループなしでスペースの数を出力し、その後に*'sのパターンを続けることができます。

このタイプのソリューションを使用して、任意の方向の三角形を作成できます。

于 2012-12-18T16:40:36.233 に答える
-1

シングルループで星のピラミッドを作る

for(i=0; i<a; i++)
{
    for(j=0; j<a-i-1; j++)
        printf(" ");
    for(j=0; j<2*i+1; j++)
        printf("*");
    printf("\n");
}
于 2017-06-05T06:13:18.230 に答える