Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将阵列从一个阵列更改为另一个阵列,然后再更改回来 我有一个C++中的原始数组,它可以包含任何数字和长度的变化,但是这是我的例子,下面的简单内容: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };_C++_Arrays_Algorithm_Sorting - Fatal编程技术网

如何将阵列从一个阵列更改为另一个阵列,然后再更改回来 我有一个C++中的原始数组,它可以包含任何数字和长度的变化,但是这是我的例子,下面的简单内容: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

如何将阵列从一个阵列更改为另一个阵列,然后再更改回来 我有一个C++中的原始数组,它可以包含任何数字和长度的变化,但是这是我的例子,下面的简单内容: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };,c++,arrays,algorithm,sorting,C++,Arrays,Algorithm,Sorting,我想要的是改变数组的顺序 通过将数组拆分为动态大小的块,比如说3(可能是其他大小) 并使用这些值将阵列分成约3个数字的块: 0,1,2 | 3,4,5 | 6,7,8 | 9 然后从第一个块中取第一个值,从下一个块中取下一个值,如下所示: 0,3, 1,4, 2,5, 然后跳过两个块并添加下一部分,如: 6,9, 7, 8 7和8将是单独的,因为这两个数字在最后一个块中没有更多的部分。 然后,完整结果应如下所示: 0,3,1,4,2,5,6,9,7,8 当最后一个块有时可能不包含完整的数

我想要的是改变数组的顺序 通过将数组拆分为动态大小的块,比如说3(可能是其他大小)

并使用这些值将阵列分成约3个数字的块:

0,1,2 | 3,4,5 | 6,7,8 | 9
然后从第一个块中取第一个值,从下一个块中取下一个值,如下所示:

0,3, 1,4, 2,5,
然后跳过两个块并添加下一部分,如:

6,9, 7, 8
7和8将是单独的,因为这两个数字在最后一个块中没有更多的部分。 然后,完整结果应如下所示:

0,3,1,4,2,5,6,9,7,8
当最后一个块有时可能不包含完整的数字集时,我如何用算法解决这个问题

在那之后,我如何才能创建一个算法,将结果数组反转回原来的状态

不,这不是作业,我要用它来移动一个声音文件,让其他人很难复制这个文件,然后按照自己的意愿使用它

编辑:这是我最后一次尝试测试时遇到的问题:

static int test[] = { 0 ,1 ,2, 3, 4, 5, 6, 7, 8, 9};
static int testTo[] = { -1 ,-1 ,-1, -1, -1, -1, -1, -1, -1, -1};
int _tmain(int argc, _TCHAR* argv[])
{
    int len = 10;
    int block = len/3.0;
    for (int i=0;i<len;i=i+block*2)
    {
        for (int y=0;y<block&&i+(y*2)+1<len-1;y++)
        {
            testTo[i+(y*2)] = test[i+y];
            testTo[i+(y*2)+1] = test[(i+block)+y];
        }
    }
    return 0;
}
static int test[]={0,1,2,3,4,5,6,7,8,9};
静态int testTo[]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
int _tmain(int argc,_TCHAR*argv[]
{
int len=10;
int block=len/3.0;

对于(int i=0;i而言,最简单的修复方法是分离出
testTo
计数器,这使我们不必担心处理数组末尾的复杂代码-我们可以愉快地生成越界索引,然后通过检查是否越界而忽略它们

我还想把你的代码简化一点

这就是我想到的:

int test[] = { 0 ,1 ,2, 3, 4, 5, 6, 7, 8, 9};
int testTo[] = { -1 ,-1 ,-1, -1, -1, -1, -1, -1, -1, -1};
int len = 10;
int block = len/3.0;
int counter = 0;
for (int i = 0; i < len; i = i + block*2)
   for (int y = 0; y < block; y++)
      for (int z = 0; z < 2; z++) // made this a loop rather than 2 statements
      {
         int index = i + y + z*block;
         if (index < len)
            testTo[counter++] = test[index];
      }
这将为我们提供以下输出:

0,3,1,4,2,5,6,9,7,0,8,0
这将更容易转换回来

或者,如果您仍然坚持自己的结构,或者想勇敢地面对代码:


在处理最后一对块时,您可以根据数组中剩余的元素数来执行操作。请注意,我们有4个元素(
6,9,7,8
)在我们的最后一对块中,现在还要注意数据的形式是
firstBlock secondBlock firstBlock
-我们在块之间交替一次,然后在第二个块中用完元素,所以只需从第一个块中选取。更一般地说,我们交替的次数(因此第二块中的项目数量)是
elementsRemaining-blockSize
,在这种情况下是
4-3=1

你有代码可以处理数组,其中最后一个块的长度是正确的吗?那么我们可以帮你修改它,而不是写整件事或含糊不清地描述处理策略,而没有真正的代码可供参考。我不知道如何修改回答这个问题时不要只给你代码,从长远来看,我觉得这对你没有多大帮助,或者出于同样的原因,这是特别合适的,因为代码似乎是按照所描述的模式逻辑地流动的。你是否尝试过自己编写代码?是的,我有。我已经花了大约一个星期的时间来编写代码,但无法确定它出来了。迷路了如何做最后一块!我将添加我的最后一个测试代码。谢谢杜克林,这让我的大脑再次工作。
0,1,2 | 3,4,5 | 6,7,8 | 9,0,0
0,3,1,4,2,5,6,9,7,0,8,0