C++ 对于循环重置(在特定情况下将i重新初始化为1)-不';你不能按预期工作吗?
我有一个名为flip的预定义函数,它可以改变向量元素的顺序,如下所示:C++ 对于循环重置(在特定情况下将i重新初始化为1)-不';你不能按预期工作吗?,c++,C++,我有一个名为flip的预定义函数,它可以改变向量元素的顺序,如下所示: for FLIP(9, [3 2 6 8 5 9 1 7 4], 1, 6) -> v = [9 5 8 6 2 3 1 7 4] void FLIP(int x, int v[100], int w, int y) { int aux; for (int p = w; p <= y / 2; p++) { aux = v[p]; v[p] = v[y
for FLIP(9, [3 2 6 8 5 9 1 7 4], 1, 6) ->
v = [9 5 8 6 2 3 1 7 4]
void FLIP(int x, int v[100], int w, int y)
{
int aux;
for (int p = w; p <= y / 2; p++)
{
aux = v[p];
v[p] = v[y - p + 1];
v[y - p + 1] = aux;
}
}
基本上,第三个参数必须是1
好吧,我想我可能会先用两个翻盖电话来获得最高的号码。首先应用于获取v[1]中的最大数字,然后将其移动到v[n]
然后我应该重置for循环,这样我就可以在I=1的情况下得到其他值
不幸的是,它没有按预期工作
这是我的节目
#include <iostream>
using namespace std;
void FLIP(int x, int v[100], int w, int y)
{
int aux;
for (int p = w; p <= y / 2; p++)
{
aux = v[p];
v[p] = v[y - p + 1];
v[y - p + 1] = aux;
}
}
int main()
{
int n, v[100], max = -32000;
cin >> n;
int copie = n;
for (int t = 1; t <= n; t++)
{
cin >> v[t];
}
for (int i = 1; i <= n; i++)
{
if (v[i] > max)
{
max = v[i];
}
}
for (int i = 1; i <= n; i++)
{
if (max == 1)
{
break;
}
if (v[i] == max)
{
FLIP(n, v, 1, i);
FLIP(n, v, 1, n);
i = 1;
max--;
n--;
}
}
for (int i = 1; i <= copie; i++)
{
cout << v[i] << " ";
}
}
我明白了
623154789
我真的不明白为什么会这样。我没想到这个循环会在max变为1之前结束,现在我不明白发生了什么
你能给我解释一下我做错了什么,我怎样才能纠正它吗?
谢谢。如果最大值是第一个数字,则只应使用该函数一次,因此请输入“如果”来检查 从
i=0
开始,而不是从i=1
开始,因为每次它都会直接跳到第二个值
for (int i = 1; i <= n; i++)
{
if (max == 1)
{
break;
}
if (v[i] == max)
{
if (i!=1)
{
FLIP(n, v, 1, i);
FLIP(n, v, 1, n);
}
else
FLIP(n, v, 1, n);
i = 0;
max--;
n--;
}
}
<代码> >(int i=1;i在C++中,数组索引从0开始),因此如果数组<代码> ARR < /C>包含[2, 3, 5 ],则ARR [0 ]=2,ARR [1 ]=3,ARR [2 ]=5。您(和您的老师)似乎会感觉到索引从1开始。直到您清除(至少在您自己的头脑中)。你基本上没有机会让这个代码工作。C也使用了0个数组。对于C和C++,beta是什么。首先,我觉得你很糟糕,因为你被教了一些非常恐怖的C++,你必须在以后再学习。我建议你读一下:这里有一个提示:在你的主循环中设置<代码> i <代码> 1之后,WHA。在循环的下一次迭代开始之前,
i
是否发生t?我建议您尽量避免在循环本身内部更改循环计数器,因为这通常会导致混乱的行为。使用一个从n
循环到1的循环,并在第一个循环中找到最大元素的第二个循环。
n = 9
v = [3 2 6 8 5 9 1 7 4]
for (int i = 1; i <= n; i++)
{
if (max == 1)
{
break;
}
if (v[i] == max)
{
if (i!=1)
{
FLIP(n, v, 1, i);
FLIP(n, v, 1, n);
}
else
FLIP(n, v, 1, n);
i = 0;
max--;
n--;
}
}