【发布时间】:2020-06-25 13:12:44
【问题描述】:
我有这个问题:给定一个有 n 个数字的向量,对数字进行排序,使偶数在奇数位置,奇数在偶数位置。例如。如果我有向量 2 6 7 8 9 3 5 1,输出应该是 2 7 6 9 8 3 5 1 。计数应该从 1 开始。因此,实际上是索引 0 的位置 1 应该是偶数,实际上是索引 1 的位置 2 应该是奇数,依此类推。现在,如果奇数和偶数相同,这很容易,假设向量中有 4 个偶数和 4 个奇数,但是如果奇数的个数与上面示例中的偶数个数不同怎么办?我该如何解决。我将代码与我所做的尝试之一附加在一起,但它不起作用。我能得到一些帮助吗?我要求您保持简单,这意味着仅使用向量等。没有奇怪的方法或任何东西,因为我是初学者,我只知道基础知识。提前致谢! 不得不提的是,n initial 是全局声明的,是向量元素的个数,v_initial 是需要重新排列的元素的初始向量。
任务说将剩余的数字添加到向量的末尾。就像如果有 3 个奇数和 5 个偶数,那 2 个额外的偶数应该扔在向量的末尾
void vector_pozitii_pare_impare(int v_initial[])
{
int v_pozitie[50],c1=0,c2=1;
for (i = 0; i < n_initial; i++)
{
if (v_initial[i] % 2 == 0)
{
bool isTrue = 1;
for (int k = i + 1; k < n_initial; k++)
{
if (v_initial[k] % 2 != 0)
isTrue = 0;
}
if (isTrue)
{
v_pozitie[c1] = v_initial[i];
c1++;
}
else
{
v_pozitie[c1] = v_initial[i];
c1 += 2;
}
}
else
{
bool isTrue = 1;
for (int j = i + 1; j < n_initial; j++)
{
if (v_initial[j] % 2 == 0)
{
isTrue = 0;
}
if (isTrue)
{
v_pozitie[c2] = v_initial[i];
c2++;
}
else
{
v_pozitie[c2] = v_initial[i];
c2 += 2;
}
}
}
}
【问题讨论】:
-
我在其中一次尝试中附加了代码,但它不起作用 -- 现在是学习如何使用该软件的好时机与您的编译器一起称为调试器。它允许您单步执行代码、监视变量等。
-
如果您首先将语言更改为调用第一个元素 0,例如一个偶数位置,那么你可以说偶数值需要在偶数位置上,反之亦然。不确定这是否会导致一些混乱。您还举了一个输出应该的例子。这是唯一可能的解决方案还是众多解决方案之一?如果偶数/奇数的分布不均匀,会发生什么?我知道你在问在这种情况下该怎么做,但我在问你在这种情况下你想发生什么。
-
",但是如果奇数个数与偶数个数不同怎么办?" - 如果任务没有澄清这种情况(或给出了一定的限制,这样这种情况就永远不会发生)我们对此无能为力。也许插入0?也许会抛出错误?该任务可能会澄清它。
-
任务说将剩余的数字添加到向量的末尾。就像如果有 3 个奇数和 5 个偶数,则应该在向量的末尾抛出 2 个额外的偶数
-
我建议你在写任何代码之前先把它画在纸上。看来你没有太多计划就直接开始编写代码了。