gpt4 book ai didi

c - 根据位置每 3 个元素从数组中删除元素

转载 作者:行者123 更新时间:2023-11-30 14:47:44 25 4
gpt4 key购买 nike

我创建了一个名为 elements_n 的数组,其中包含元素 0N-1,其中 N 为 2 . 下面的数字是名为 elements_n 的数组的元素:

0 1 

我有另一个名为 Arr 的数组,它包含以下元素:

0 1 3 1 2 4 

如果数组 Arr 的前 3 个元素中的任何一个等于 elements_n 的第一个元素,即 0,我想从名为 Arr 的数组中删除该元素。然后,我对数组 Arr 的接下来 3 个元素重复相同的过程。因此,为了更好地解释自己,我将使用以下示例:

将数组 Arr 的前 3 个元素(0、1、3)与 elements_n 的第一个元素(0)进行比较。由于 Arr[0] == elements_n[0]。我从数组 Arr 中删除 Arr[0]

将数组 Arr 的接下来 3 个元素(1、2、4)与 elements_n 的第二个元素(1)进行比较。由于 Arr[3] == elements_n[1]。我从数组 Arr 中删除 Arr[3]。因此数组 Arr 中应保留的元素是:

1 3 2 4

当我用 C 编程自己实现它并使用下面的代码时,最终结果如下:

 1       3       3       2       2       4

而不是:

  1       3       2       4

这是我实现的代码:

#include <stdio.h>
#include <stdlib.h>
#define N 2

int main() {
unsigned *elements_n = malloc(N * sizeof(unsigned));

for (int i = 0; i < N; i++) {
elements_n[i] = i; //Created an array which has the elements 0 to N-1
}
printf("\n");

unsigned Arr[6] = { 0, 1, 3, 1, 2, 4 };
unsigned position_indices[2] = { 3, 3 }; //Moving every 3 elements in the Arr array.

int count = 0;
int index = 0;
unsigned *ptr_Arr = &Arr[0];

do {
for (int i = 0; i < position_indices[count]; i++) {
if (ptr_Arr[i] == elements_n[count]) {
index = i + 1; //Index of the Arr element that has the same value as the element in the array elements_n

for (int j = index - 1; j < position_indices[count] - 1; j++) {
ptr_Arr[j] = ptr_Arr[j + 1];
}
}
}
printf("\n");
ptr_Arr += position_indices[count] - 1;
count++;
} while (count < 2);

for (int i = 0; i < 6; i++) {
printf("%d\t", Arr[i]);
}
printf("\n");

free(elements_n);

return 0;
}

最佳答案

您可以尝试类似的方法(未经测试)。

#include <stdio.h>
#include <stdlib.h>
#define N 2

int main()
{
unsigned *elements_n = malloc(N * sizeof(unsigned));
for (int i = 0; i < N; i++)
{
elements_n[i] = i; //Created an array which has the elements 0 to N-1
}

unsigned Arr[6] = { 0, 1, 3, 1, 2, 4 };

int dest_index = 0;
int src_index = 0;
int count = sizeof(Arr)/sizeof(Arr[0]);

for ( ; src_index < count; src_index++)
{
int group = src_index / 3;
if (Arr[src_index] != elements_n[group])
{
Arr[dest_index++] = Arr[src_index];
}
}

for (int i = 0; i < dest_index; i++)
{
printf("%d\t", Arr[i]);
}
printf("\n");

free(elements_n);

return 0;
}

关于c - 根据位置每 3 个元素从数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50969861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com