2014-10-25 2 views
0
class Num { 
    public static void main(String[] args) { 
     for(int i=1;i<=5;i++) { 
      for(int j=1;j<=i;j++) { 
       if(j==1) { 
        System.out.print(i); 
       } 
       else if(j==2) { 
        System.out.print(" "+(i+j+2)); 
       } 
       else { 
        System.out.print(" "+(i+j+4)); 
       } 
      } 
      System.out.println(" "); 
     } 
    } 
} 

Выход:Какова логика для печати нижеуказанного номер шаблона

1 
2 6 
3 7 10 
4 8 11 12 
5 9 12 13 14 

Ожидаемого:

1 
2 6 
3 7 10 
4 8 11 13 
5 9 12 14 15 

Я пытался так много, и пришел с этой логикой

when j=1 then i 
when j=2 then i+j+2 
when j=3 then i+j+4 
when j>=4 then i+j+5 

здесь абсолютно 4 условия, как я могу сделать thi s в вложенном цикле. Также заметна любая другая логика.

+0

Логика, по-видимому, заключается в том, что она записывает столбцы чисел в порядке возрастания, причем каждый столбец имеет на один меньше числа, чем предыдущий. Почему бы не заполнить 2D-массив чисел, заполнив пробелы 0, а затем напечатать этот 2D-массив по строкам, заменив 0 пробелом? –

+0

Я не хочу использовать массивы. Как я могу сделать это с помощью вложенных циклов? – beginnr

ответ

2
int lineCount = 5; 
for (int i = 1; i <= lineCount; i++) { 
    int value = i; 
    for (int j = 1; j <= i; j++) { 
     System.out.print(value + " "); 
     value += lineCount -j; 
    } 
    System.out.println(""); 
} 
0

вы забыли J = 3 случая

for (int i = 1; i <= 5; i++) { 
      for (int j = 1; j <= i; j++) { 
       if (j == 1) { 
        System.out.print(" " + i); 
       } else if (j == 2) { 
        System.out.print(" " + (i + j + 2)); 
       } 
       else if(j == 3){ 
        System.out.print(" " + (i + j + 4)); 
       } 
       else { 
        System.out.print(" " + (i + j + 5)); 
       } 
      } 
     } 
0

Советую и считаю, что было бы лучше, чтобы наши коды быть динамическими, то есть он будет работать на любом входе user.Suppose, если вопрос был изменить от 5 строк до 6 строк, вы должны изменить конструкторы for, а также добавить дополнительную конструкцию if. Во-вторых, было бы нецелесообразно хранить столько, сколько построит w.r.t нужных столбцов.

Take the no. of rows the user wants to a variable say 'noofrows'. Then its just the same as your code with little changes: 
     int noofrows; 
    Scanner s=new Scanner(System.in); 
    System.out.println("\nGive the no. of rows needed:\n"); 
    noofrows=(int)s.nextInt(); 
    System.out.println("Number give is:"+noofrows); 
    int emptyspaces; 
    for(int i = 1; i <= noofrows; i++) 
     { 
     for (int j = 1; j <= i; j++) 
     { 
      emptyspaces=(j)*(j-1)/2; //counting the no. of emptspace which is an arithmetic progression 
     System.out.print(((j-1)*noofrows+i)-emptyspaces +" "); 
     } 
     System.out.print("\n"); 
     s.close(); //edited version 

Пожалуйста, дайте мне знать, упаковывают ничего не заладилось

+0

Даже я хочу сделать код динамическим, код, который вы упомянули, не работает. Он начинает печатать от 6 – beginnr

+0

@beginnr: Thanks.Edited. – Mikki

0

Я не разработчик Java, так что отправка вам решение в C#. Вам придется заменить «using System»; с некоторыми операциями import и Console.WriteLine с соответствующими System.out.print или println.

using System; 

class Program 
{ 
    static void Main() 
    { 
     PrintNumbers(1, 5); 
    } 

    static void PrintNumbers(int level, int MaxLevel) 
    { 
     if(MaxLevel < level) 
     { 
      return; 
     } 

     int num = 0; 
     for(int i = 0, diff=MaxLevel; i < level; i++) 
     { 
      num += (i == 0)?level:(diff-i); 
      Console.Write("{0} ",num); 
     } 
     Console.WriteLine(""); 
     PrintNumbers(level+1, MaxLevel); 
    } 
} 
+0

Не размещайте решения на каком-то другом языке, когда сообщение помечено 'Java'. –