2016-10-30 2 views
-1

Мне нужно распечатать цифровую пирамиду, используя java. который считается кратным 2 вместе с такими пространствами, как он ниже. но код, который у меня есть, вызывает только кратные 1 пробела.цифровая пирамида в java.

     1 
        1 2 1 
       1 2 4 2 1 
      1 2 4 8 4 2 1 
     1 2 4 8 16 8 4 2 1 
    1 2 4 8 16 32 16 8 4 2 1 
1 2 4 8 16 32 64 32 16 8 4 2 1 

это мой код.

import java.util.Scanner; 

public class NumericPyramid { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 

     //Taking noOfRows value from the user 

     System.out.println("How Many Rows You Want In Your Pyramid?"); 

     int noOfRows = sc.nextInt(); 

     //Initializing rowCount with 1 

     int rowCount = 1; 

     System.out.println("Here Is Your Pyramid"); 

     //Implementing the logic 

     for (int i = noOfRows; i > 0; i--) { 
      //Printing i*2 spaces at the beginning of each row 

      for (int j = 1; j <= i*2; j++) { 
       System.out.print(" "); 
      } 

      //Printing j value where j value will be from 1 to rowCount 

      for (int j = 1; j <= rowCount; j++) { 
       System.out.print(j+" "); 
      } 

      //Printing j value where j value will be from rowCount-1 to 1 

      for (int j = rowCount-1; j >= 1; j--) {     
       System.out.print(j+" ");    
      }       

      System.out.println(); 

      //Incrementing the rowCount 

      rowCount++; 
     } 
    } 
} 

Выход:

How Many Rows You Want In Your Pyramid? 

7 

Here Is Your Pyramid 

       1 

      1 2 1 

      1 2 3 2 1 

     1 2 3 4 3 2 1 

     1 2 3 4 5 4 3 2 1 

    1 2 3 4 5 6 5 4 3 2 1 

    1 2 3 4 5 6 7 6 5 4 3 2 1 
+2

что произойдет, если каждый раз, когда вы увеличивайте 'j' на один, вместо этого вы удвоите его? И каждый раз, когда вы уменьшаете 'j' на один, вы уменьшаете его вдвое? –

+0

что вы имеете в виду ?. – zeogold

+0

@DavidWallace Я вижу, что вы там делали (͡ ° ͡ °), OP (к сожалению) не – Turing85

ответ

2

Для каждого у от 1 до п вам нужно написать 2^J. В настоящее время вы пишете только j. Таким образом, функция записи, которая для данного k возвращает 2^k.

EDIT: Для больше п вам нужно использовать BigInteger:

import java.math.BigInteger; 

public class NumericPyramid { 
    private static BigInteger pow(int exponent) { 
     BigInteger result = new BigInteger("1"); 
     BigInteger two = new BigInteger("2"); 
     for (int i = 0; i < exponent; i++) { 
      result = result.multiply(two); 
     } 
     return result; 
    } 

и использовать его в обоих для петель. Заменить

System.out.print(j+" "); 

с

System.out.print(pow(j)+" "); 
+0

Не будет '1 << j' проще, чем реализовать весь метод' pow() '? И параметр 'pow()' не является * базой *, а * экспонентой *. База жестко закодирована до 2. – Andreas

+0

the pow дал мне ошибку – zeogold

0

пирамида идет 1 2 4 8 16, это последовательность 1 * 2 = 2, 2 * 2 = 4, 4 * 2 = 8 и так далее, а затем идет обратное, 8/2 = 4, 4/2 = 2, 2/2 = 1, вам только нужно умножить на 2 и разделить на 2, когда центр

for (int i = 0; i < noOfRows; i++) { 
      int cont = 1; 
      for (int j = 0; j <= i; j++) { 
       System.out.print(cont + " "); 
       cont = cont * 2; 
      } 
      cont = cont/2; 
      for (int j = 0; j < i; j++) { 
       cont = cont/2; 
       System.out.print(cont + " "); 
      } 
      System.out.println(); 
     } 
+1

Что такое 'i * 2/2'? Это то же самое, что и 'i'. Умножая на 2, тогда деление на 2 оставляет исходное число (если оно не переполнено). – Andreas

+0

@Andreas Вы правы, только с 'i' сделаете трюк –

+0

, который сделал только правую половину пирамиды. – zeogold

Смежные вопросы