-1

我有 array[110] 填充了整数(行)位(只有 1 和 0),我需要通过输出将它划分为少 7 行位并重复跳过,从某个(标记为数字 2 的下一个幂)开始数组 [110] 的索引到此数组 [110] 的末尾。

现在通过7个不同的行(组,数组)我的意思是位的行,从索引是数字2的下一个幂的位开始,所以:1,2,4,8,16,32 ...也在下一行(组),值必须被输出并被索引的数量跳过,这是数组中数字 2 的下一个幂。因此,例如输出 4,跳过 4... 或输出 8,跳过 8,等等到最后一组,其中数组中的索引是 2 的下一个幂。
此外,这个较小行的第一位总是被跳过或标记为未知(“?”)
我将处理数组 [110] 中的索引从 1 开始,而不是像数组中的自然那样从 0 开始 - 更容易描述我的问题。

在示例中(我在“()”中标记了数组的索引):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(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)<-output...直到数组结束[110]

第二组将是(从索引 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)<-output...直到数组结束[110]

第三组将是(从索引 4 开始,作为 2 的下一个幂;输出 4 并跳过 4;第一个值未知):0(4)<-unknown(?), 1(5)<-output, 1(6) <-output, 1(7)<-output, 0(8)<-skip, 1(9)<-skip, 1(10)<-skip, 0(11)<- skip...直到数组结束[110]

它是汉明码的一部分。为了更好地理解:https ://www.youtube.com/watch?v=JAMLuxdHH8o

现在,我的方法是创建 7 个不同的数组,例如 group1[]、group2[]... 并手动插入某些我想跳过的索引。然后在 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("");
                }
        }

第二种方式更数学,因为我必须计算有多少索引跳过。但是,也许有方法可以写出多少个输出和多少个跳过?

4

1 回答 1

2

解决了:

        int x=0;
        int sum=0;
        boolean w = true;
        System.out.println("Bity potegi CZWARTEJ");
        for (int i = 0; i < 110; i++)
        {
            if (i<=4) continue;

            x++;
            if (x == 4)
            {
                x = 0;
                w = !w;
            }


            if (i%20==0) System.out.println("");
            if (w) System.out.print(tab[i]+"("+i+")"+",");
            sum++;
            if (i==109) System.out.println("\n"+sum);

        }
于 2015-06-12T18:30:41.753 回答