1

我需要编写一个接受两个整数作为参数的方法,一个最小值和一个最大值。在第一行,我需要打印该范围内的所有数字(包括)。在下一行,我从 min+1 开始,打印到最大值的所有数字,然后返回到范围的前面并打印 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();   
   }
}
4

8 回答 8

2

您应该考虑每行需要多少个值,然后确定这些值应该是什么。如果不给你解决方案,很难让它更清晰。

让我们知道你的进展。

于 2010-12-12T23:30:38.790 回答
1

彼得是对的,IMO 正在以正确的方式回答家庭作业问题。您知道每行需要多少元素,因此您需要一个外部循环来为您提供这么多元素,这将阻止您获得现在看到的级联行为。

此时您需要考虑您的内部循环,并且您可能会发现使用模数运算符 (%) 最简单。这将允许您在不超过目标的情况下进行迭代。

你应该能够从那里弄清楚,而且你自己弄清楚算法比从别人那里复制它要好得多,至少在这个开发水平上。祝你好运!

于 2010-12-13T00:08:51.030 回答
0
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);
    }
}
于 2012-04-08T07:51:31.597 回答
0

这是代码..

 for i = 0 to max-min
 for j = 0 to max-min
 print min + (i+j)%n
于 2013-03-28T17:51:40.330 回答
0

我没有运行这个,但它可能会工作:

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();   
   }

}
于 2010-12-12T23:43:05.730 回答
0

考虑一种打印缺失数字的方法。答案在下面,如果你想不出来,你可以检查一下。


这也应该打印缺少的部分:

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(); 
   }  
}
于 2010-12-12T23:34:16.027 回答
0

尝试像这样移动一个数组:

   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();
        }
    }
于 2010-12-12T23:59:35.293 回答
0

这是一个非常简单的实现。希望这可以帮助!

   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
于 2013-02-18T10:59:07.653 回答