Java楼梯打印方向错误(hackerrank)

时间:2018-10-08 17:35:32

标签: java algorithm data-structures

这种对楼梯的解决方案可打印正确的输出,但方向相反。任何想法如何更改此解决方案以获得所需的结果?

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

public class Solution {

// Complete the staircase function below.
static void staircase(int n) {
int counter=0;
    for(int i=0; i<n;i++)
    {
        //for (int k=0; k<n-k-1;k++)
        //  {
        //      System.out.println("");
        //  }
        System.out.print("\n");
        System.out.print("#");
        counter++;

        for(int j=0; j<counter-1;j++) 
        {

            System.out.print("#");
        }
    }   
}

private static final Scanner scanner = new Scanner(System.in);

public static void main(String[] args) {
    int n = scanner.nextInt();
    scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

    staircase(n);

    scanner.close();
}
}

输入:

6

预期输出:

     #
    ##
   ###
  ####
 #####
######

实际输出:

#
##
###
####
#####
######

这是针对hackerrank的简单挑战。我只希望能够使用自己发现的方法,而不是在线找到的解决方案。谢谢!

7 个答案:

答案 0 :(得分:2)

您只需要做两个更改:

首先,您必须添加一个循环,以打印空格。如果您从n开始循环并循环直到大于等于i,然后减去,这将打印正确数量的空格。

第二,您需要在循环末尾添加换行符:

static void staircase(int n) {

   int counter=0;
   for(int i=0; i<n;i++)
   {
       counter++;
       for(int k=n; k>= i;k--)
       {
           System.out.print(" "); 
       } 
       for(int j=0; j<=counter-1;j++) 
       {
           System.out.print("#");
       }

       System.out.print("\n");
   }
}  

输出:

     #
    ##
   ###
  ####
 #####
######

也请注意您的代码。关闭System.in是错误的做法。一般规则是,如果您没有打开资源,则不应关闭它。

答案 1 :(得分:1)

无需使用额外的counter变量。只需尝试:

static void printStaircase(int n) {
    if (n < 0) {
        return;
    }

    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n - i; ++j) {
            System.out.print('\u00a0'); // nbsp
        }
        for (int j = n - i + 1; j <= n; ++j) {
            System.out.print('#');
        }
        System.out.println();
    }
}

答案 2 :(得分:0)

另一个命题:

static void staircase(int n) {
    for(int i=n; i> 0; i--) {
        String s= "";
        for(int j=1; j<=n-i+1; j++) s+="#";
        System.out.printf("%"+n+"s\n", s);

    }
}

答案 3 :(得分:0)

这应该有效

 static void staircase(int n) {
     String p = "";
  for(int i = 0 ; i< n ; i++){
      p = p + "#";
      System.out.printf("%"+n+"s\n", p);
     
  }

}

答案 4 :(得分:0)

非常简单快捷的方法-

for (int i = 1; i <= n; i++) 
    {
      System.out.println(new String(new char[n-i]).replace("\0", " ") + new String(new char[i]).replace("\0", "#"));
    }

答案 5 :(得分:0)

另一种方式

fun staircase(n: Int): Unit {
    for (i in 1..n) {
        print(" ".repeat(n-i))
        println("#".repeat(i))
    }
}

答案 6 :(得分:0)

public static void staircase(int n) {
    int counter = 0;
    for (int i = 1; i <= n; i++) {
        counter++;
        for (int x = n-1; x >= i; x--) {
            System.out.print(" ");
        }
        for (int j = 0; j <= counter - 1; j++) {
            System.out.print("#");
        }
        if (i != n) {
            System.out.println();
        } else {
            System.out.print("");
        }
    }
}