【发布时间】:2016-04-23 04:11:16
【问题描述】:
我正在尝试制作一个程序,该程序接受一个数组并将其向后还原,但是该程序必须以三个一组的方式对数组执行此操作。因此,如果用户在数组中输入数字 1、2、3、4、5、6,程序将输出:3、2、1、6、5、4。
当我运行当前程序时,我得到:3 2 1 4 5 6。如果有人能帮我弄清楚为什么这会很好,因为我有点困惑。
这是我的代码:
int * numbersProcessFour(int *x, int size)
{
int i = 0, three = 3, six = 6, nine = 9;
if (size < 4)
{
for (i; i < three; i++)
{
reverse_array(x, three);
printf("%d ", x[i]);
}
}else if (size > 3 && size < 7)
{
for (i; i < three; i++)
{
reverse_array(x, three);
printf("%d ", x[i]);
}
for (i; i < 6; i++)
{
reverse_array(x, three);
printf("%d ", x[i]);
}
}
else if (size > 6 && size < 10)
{
for (i; i < three; i++)
{
reverse_array(x, three);
printf("%d ", x[i]);
}
for (i; i < 6; i++)
{
reverse_array(x, three);
printf("%d ", x[i]);
}
for (i; i < 9; i++)
{
reverse_array(x, three);
printf("%d ", x[i]);
}
}
}
void reverse_array(int *x, int length)
{
int i, temp;
for (i = 0; i<length / 2; i++)
{
temp = x[i];
x[i] = x[length - i - 1];
x[length - i - 1] = temp;
}
}
【问题讨论】:
-
有多种方法。您能否尝试先创建一个二维数组
arr[SIZE][3],然后仅反转第一个维度。 -
你想太多了。只需将
x[0]与x[2]、x+=3和size-=3交换,直到size<3。如果是size==2,则将x[0]替换为x[1]。 -
创建两个指针并交换第一个和第二个数组元素。
-
@user3386109 你对我想太多了。这让我很生气...我根据请求更改了我的 reverse_array 函数,但这并不能解决我将打印输出作为最终结果的问题。仍然得到 3 2 1 4 5 6