-1

配列 [110] を整数 (行) のビット (1 と 0 のみ) で埋めました。出力によってそれを 7 少ない行のビットに分割し、特定の (2 の次の累乗としてマークされている) から繰り返しスキップする必要があります。配列 [110] のインデックスからこの配列 [110] の末尾まで。

ここで、7 つの異なる行 (グループ、配列) によって、インデックスが 2 の次の累乗であるビットから始まるビットの行を意味するので、1,2,4,8,16,32... また、次の各行 ( group) の場合、配列の 2 の次の累乗であるインデックスの数だけ値を出力してスキップする必要があります。したがって、たとえば、出力 4、スキップ 4... または出力 8、スキップ 8 など、配列内のインデックスが 2 の次の累乗である最後のグループまで続きます。
さらに、この小さな行の最初のビットは常にスキップされるか、または次のようにマークされます。不明 ("?")
配列 [110] のインデックスが 0 ではなく 1 から始まることを扱います。これは、配列で自然であるように - 私の問題を簡単に説明します。

例(「()」で配列のインデックスをマーク):1(1)、1(2)、0(3)、0(4)、1(5)、1(6)、1(7)、 0(8)、1(9)、1(10)、0(11)。

この例では、最初のグループ (出力 1、スキップ 1) は次のようになります: 1(1) <-unknown(?)、1(2)<-skip、0(3)<-output、0(4)<-skip、 1(5)<-出力、1(6)<-スキップ、1(7)<-出力、0(8)<-スキップ、1(9)<-出力、1(10)<-スキップ、0( 11)<-出力...配列の最後まで[110]

2 番目のグループは次のようになります (インデックス 2 から始まり、2 を出力して 2 をスキップします。最初の値は不明と見なされます): 1(2)<-unknown(?)、0(3)<-output、0(4)<-skip、 1(5)<-スキップ、1(6)<-出力、1(7)<-出力、0(8)<-スキップ、1(9)<-スキップ、1(10)<-出力、0( 11)<-出力...配列の終わりまで[110]

3 番目のグループは次のようになります (次の 2 の累乗としてインデックス 4 から開始。出力 4 で 4 をスキップ。最初の値は不明): 0(4)<-unknown(?)、1(5)<-output、1(6) <-出力、1(7)<-出力、0(8)<-スキップ、1(9)<-スキップ、1(10)<-スキップ、0(11)<-スキップ...配列の最後まで[110]

ハミングコードの一部です。理解を深めるために: https://www.youtube.com/watch?v=JAMLuxdHH8o

今、私の方法は、group1 []、group2 [] ...などの7つの異なる配列を作成し、そこにスキップしたい特定のインデックスを手動で挿入することです。次に、for ループで、次の各 group[] 配列に「出力」ビットのみを入力します。

しかし、for-loop で繰り返し実行してもらいたいのです。そこにコードを記述して、2、4、8 (など) の値をスキップし、2、4、8 (...) の値をそれぞれ出力します。したがって、出力とスキップの異なるが静的な「距離」を持つ7つのgroup []配列。どうやってするの?

私のコードは次のとおりです。

int skip2 []= {3,6,7,10,11,14,15,18,19,22,23,26,27,30,31,34,35,38,39,42,43,46,47, 
                        50,51,54,55,58,59,62,63,66,67,70,71,74,75,78,79,82,83,86,87,90,91,94,95,98,99,102,103,106,107}; 
          for (int j : skip2)
          {
          System.out.print(tab[j] + "("+j+")"+",");
          if (j%25==0)
                {
                    System.out.println("");
                }
          }

そして、後のグループからのより大きな値の場合 (これは 5 番目のグループからのものなので、16 インデックスから開始しますが、不明なのでスキップします):

for (int m=17; m<110; m++)
        {
            if ((m>=32 && m<=47) && (m>=64 && m<=79) && (m>=96 && m<=111)) continue;
            System.out.print(tab[m] + "("+m+")"+",");
            if (m%16==0)
                {
                    System.out.println("");
                }
        }

Second way is more mathematical, because I must count how many indexes skip. However maybe there is method to write how many output and how many skip?

4

1 に答える 1