1

min と max の 2 つの int を引数として受け取るメソッドを作成する必要があります。最初の行に、その範囲内のすべての数値を出力する必要があります (包括的)。次の行では、min+1 で開始し、max までのすべての数値を出力してから、範囲の先頭に戻って min を出力します。次の行は min+2 から始まり、範囲内の各数値から始めて、これを繰り返すまで続きます。メソッドでこれを印刷したい:

12345
23451
34512
45123
51234

または、3 と 9 が渡された場合、次のようになります。

3456789
4567893
5678934
6789345
7893456
8934567
9345678

私はあらゆる種類のことを試しましたが、私が気付いていない簡単な方法があると確信しています。配列やarrayListsなしでこれを行うことになっています。私は仕事をするのに良い基盤を持っていると思いますが、ここからどこへ行くべきかわかりません. 私の基本コードはこれを出力します:

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

これは非常に単純な実装です。お役に立てれば!

   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 に答える
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

これがコードです..

 for i = 0 to max-min
 for j = 0 to max-min
 print min + (i+j)%n
于 2013-03-28T17:51:40.330 に答える
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

私はこれを実行しませんでしたが、うまくいくかもしれません:

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 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 に答える