Я не могу понять, как сбросить цикл (см. Пример) - PullRequest
2 голосов
/ 13 декабря 2010

Мне нужно написать метод, который принимает два целых числа в качестве аргументов, мин и макс.В первой строке мне нужно напечатать все числа в этом диапазоне (включительно).На следующей строке я начинаю с min + 1, печатаю все числа до max, а затем возвращаюсь к передней части диапазона и печатаю min.В следующей строке я начинаю с min + 2 и так далее, пока не повторю это, начиная с каждого числа в диапазоне. Очень сложно объяснить, вот два примера: скажем, я передаю 1 и 5 в качестве аргументов min и max.Я хочу, чтобы метод напечатал это:

12345
23451
34512
45123
51234

Или, если 3 и 9 были пройдены, я ожидал бы это:

3456789
4567893
5678934
6789345
7893456
8934567
9345678

Я пробовал все виды вещей, я 'Я уверен, что есть простой способ сделать это, что я не понимаю.Я должен сделать это без массивов или массивов списков.Я думаю, у меня есть хорошая база для работы, но я просто не могу понять, куда идти дальше.Мой базовый код печатает это:

12345
2345
345
45
5

И это:

3456789
456789
56789
6789
789
89
9

Я в тупике.Вот мой код:

public void printSquare(int min, int max){
   for (int i=min; i<=max; i++){
      for (int j=i; j<=max; j++){
         System.out.print(j);         
      }
   System.out.println();   
   }
}

Ответы [ 8 ]

3 голосов
/ 28 марта 2013

Вот код ..

 for i = 0 to max-min
 for j = 0 to max-min
 print min + (i+j)%n
3 голосов
/ 18 февраля 2013

Это очень простая реализация. Надеюсь, это поможет!

   int n = max-min+1;
   for (int i=0 ; i<n; i++){
    for (int j=0; j<n; j++)
     cout<<min + (i+j)%n;
      cout<<"\n";
   }

Выход:

min = 3 | max = 9 

    3456789
    4567893
    5678934
    6789345
    7893456
    8934567
    9345678
2 голосов
/ 13 декабря 2010

Вы должны подумать о том, сколько значений вы хотите в каждой строке, а затем определить, какими должны быть эти значения.Трудно сделать его более понятным, не дав вам решения.

Дайте нам знать, как вы поступите.

1 голос
/ 13 декабря 2010

Питер прав, и IMO правильно отвечает на домашнее задание. Вы знаете, сколько элементов вы хотите в каждой строке, поэтому вам нужен внешний цикл, который дает вам столько элементов, это не даст вам получить каскадное поведение, которое вы видите сейчас.

В этот момент вам нужно подумать о ваших внутренних циклах, и вы, вероятно, найдете это проще всего, используя оператор модуля (%). Это позволит вам выполнять итерации, даже не переходя к цели.

Вы должны быть в состоянии понять это оттуда, и вам гораздо лучше понять алгоритм самостоятельно, чем копировать его от кого-то еще, по крайней мере, на этом уровне развития. Удачи!

0 голосов
/ 08 апреля 2012
public class Test1{
    public void printSquare(int min, int max){
        for (int i=min; i<=max; i++){
            for (int j=i; j<=max; j++){
                System.out.print(j);       
            }
            for(int k= min; k<i; k++){
                System.out.print(k);     
            }
            //System.out.print(i-1);
            System.out.println();   
        }
    }
    public static void main(String[] args){
        Test1 t = new Test1();
        t.printSquare(1,5);
    }
}
0 голосов
/ 13 декабря 2010

попробуйте просто сдвинуть массив следующим образом:

   static void Main(string[] args)
    {
        // this will work equally well with numbers letters or other types of characters
        int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        String a = "hello";
        for (int i = 0; i < nums.Length; i++)
        {
            int j = 5;
            int num = i;
            while (j-- > 0)
            {
                if (num >= nums.Length)
                {
                    num = 0;
                }

                // shift the loop
                Console.Write(nums[num++]);
            }
            Console.WriteLine();
        }
    }
0 голосов
/ 13 декабря 2010

Я не запускал этот, но он может работать:

public void printSquare(int min, int max){

   int dif = max - min;
   for (int i=min; i<=max; i++){

      for (int j=i; j <= i+dif ; j++){
         int temp = j;
         if ( temp > max ) temp = temp  - max;
         System.out.print(temp);         
      }

   System.out.println();   
   }

}
0 голосов
/ 13 декабря 2010

Подумайте о способе печати пропущенных чисел. Ответ ниже, если вы не можете придумать его, вы можете проверить его.


Это также должно напечатать недостающие части:

public void printSquare(int min, int max){  
   for (int i=min; i<=max; i++){  
      for (int j=i; j<=max; j++){  
         System.out.print(j);         
      }  
      for (int k=0; k<i-min; k++){  
         System.out.print(min+k);         
      }  
      System.out.println(); 
   }  
}
...