0

5 つの 4 桁の数字の配列を受け取り、最下位桁に基づいて配列をソートするプログラムを作成しようとしています。たとえば、数値が 1234、5432、4567、および 8978 の場合、配列は最初に最後の桁でソートされるため、ネスト ソートは 5432、1224、4597、8978 になります。その後は 1224、5432、8978、 4597. 完全にソートされるまで続きます。

並べ替えのために配列とその一部を表示するためのコードを作成しました。各桁を比較するために必要な方程式の書き方がわかりません。これは、これまでのところ各桁でソートするための私のコードです:

public static void sortByDigit(int[] array, int size)
  {
    for(int i = 0; i < size; i++)
    {
      for(int j = 0; j < size; j++)
      {


      }

      for(i = 0; i < size; i++)
      { 
        System.out.println(array[i]); 
      }
    }
  }

ネストされた for ループに何を入れればよいかわかりません。モジュラスを使用する必要があると思います。

数字を区切るためにこれを書いただけですが、数字を交換したり比較したりする方法がわかりません。

int first = array[i]%10;
   int second = (array[i]%100)/10;
   int third = (array[i]%1000)/10;
   int fourth = (array[i]%10000)/10;

これは for ループに入りますか?

4

1 に答える 1

1

あなたの問題は、主に特定のインデックスで数字の値を取得しているようです。それができたら、解決策を策定できるはずです。

モジュラスが必要だというあなたの予感は完全に正しいです。モジュロ演算子 ( %) は、指定された除算の剰余を返します。これは10 % 2、剰余がないため、言うと 0 になることを意味します。10 % 3ただし、剰余は 1 であるため、1 になります。

モジュラスの簡単な背景を考えると、数字を取得できるメソッドを作成する方法を理解する必要があります。一般的な署名から始めましょう。

public int getValueAtIdx(int value, int idx){
}

したがって、 を呼び出すとgetValueAtIdx(145, 2)、返されるはず1です (インデックスが最下位桁から始まると仮定します)。を呼び出すとgetValueAtIdx(562354, 3)、 が返され2ます。あなたはアイデアを得る。

それでは、単純なケースでこれを行う方法を理解することから始めましょう。としましょうgetValueAtIdx(27, 0)。モジュラスを使用すると、それを取得できるはずです7。私たちの方程式は27 % x = 7であり、決定する必要があるだけですx27で割ると余り7は? 10、 もちろん!それが私たちの方程式を作ります27 % 10 = 7

これですべて見つけてダンディになりましたが、どのように10関連してい0ますか? 1では、今度は index の値を取得してみて( 2)、それがわからないかどうかを確認してみましょう。前回行ったことで、次のようになるはずです(27 % x = 27警告: ここには と思われるウサギの穴がありますが、さらに調べてみると、この場合にのみ機能することがわかります)。先ほど使った を 2 乗するとどうなるでしょうか ( ) ? それは私たちに与えるでしょう。あとは割るだけでOKです。x510index+127 % 100 = 2710

では、私たちが作成している関数ではどのように見えるでしょうか?

public int getValueAtIdx(int value, int idx){
    int modDivisor = (int) Math.pow(10, (idx+1));
    int remainder  = value % modDivisor;
    int digit      = remainder / (modDivisor / 10);
    return digit;
}

では、より複雑な例に戻りましょう: getValueAtIdx(562354, 3).

最初のステップでは、modDivisorとなり10^4、これは に等しくなり10000ます。

2 番目のステップでremainderは、 が に設定されます。562354 % 10000これは に等しくなり2354ます。

最後の 3 番目のステップでdigitは、 が に設定されremainder / (10000 / 10)ます。それを分解すると、remainder / 1000(整数除算を使用して) に等しい が得られ2ます。

最後のステップは、取得した数字を返すことです。

編集: 並べ替えロジック自体については、ここで良いアイデアを探すことをお勧めします。

一般的なプロセスは、2 つの数字を比較し、等しい場合は次の数字に移動することです。等しくない場合は、バケツに入れて先に進みます。

于 2013-11-08T21:55:04.530 に答える