C++ 为什么我的for循环只运行了2次而不是10次?
我试图找到数组中空间和时间复杂度为O(n)的第三高数。 我的程序显然是错误的,但这不是问题所在。C++ 为什么我的for循环只运行了2次而不是10次?,c++,C++,我试图找到数组中空间和时间复杂度为O(n)的第三高数。 我的程序显然是错误的,但这不是问题所在。 thirdhighestnum函数中的for循环似乎只运行了2次。我似乎找不到原因。有人能帮我吗。很抱歉问了这么基本的问题,我是这里的初学者 #include<iostream> using namespace std; int thirdhighestnum(int a[],int size) { cout<<" "<<size<<en
thirdhighestnum
函数中的for循环似乎只运行了2次。我似乎找不到原因。有人能帮我吗。很抱歉问了这么基本的问题,我是这里的初学者
#include<iostream>
using namespace std;
int thirdhighestnum(int a[],int size)
{
cout<<" "<<size<<endl;
int first=a[0],second=0,third=0;
for(int i=1;i<size;i++)
{
cout<<a[i]<<";"<<endl;
if(a[i]>first)
{
first=a[i];
if(a[i+1]>first)
{
second=first;
first=a[i+1];
if(a[i+2]>first)
{ third=second;
second=first;
first=a[i+2];
}
}
cout<<i<<endl
return third;
}
}
}
int main()
{ int num,a[10];
cout<<"Enter the elements in the array"<<endl;
for(int i=0;i<10;i++)
cin>>a[i];
cout<<"Third highest number is "<<thirdhighestnum(a,10)<<endl;
return 0;
}
#包括
使用名称空间std;
int thirdhighestnum(int a[],int size)
{
cout这是您的return third
语句的位置。当任何数字大于第一个数字时,它将退出thirdhighestnum
函数并返回一个值。将它放在for
循环之外,应该就可以了。这被称为,库函数可以为您执行此操作。
至于代码失败的原因,您的逻辑中有一个缺陷
for(int i=1;i<size;i++)
{
// some code
if(a[i]>first)
{
// some more code
cout<<i<<endl
return third;
}
}
for(int i=1;ifirst)
{
//还有代码吗
cout实际上它只执行一次,即只执行第一次迭代。当i=1
时,它打印一个[1],即2;
之后,它打印i
即1
,因此它在这里显示为2;1
,您认为它正在打印2
数字
主要问题是您的返回第三个语句,该语句仅在第一次迭代中终止for循环。请,请,请,现在开始阅读!并开始使用它。此代码的格式非常糟糕,几乎不可读。请修复。(编辑后更好)您似乎在thirdhighestnum
中的return third
之前丢失了一个分号。您的本地副本也是这样吗?我已修复了这个问题,但它仍然只运行了2次,而没有丢失分号。您的for循环运行了9次。没有问题there@Glorious15看起来你刚从学校回来您的函数.return third
是否打算位于循环内部?请注意,这并不能解决数组索引仍然可能导致不正确的问题。这是真的,我的答案并不全面,但它只涵盖了第一个障碍。算法中的第n个元素实际上是O(n log n).这个问题特别说明他们正在寻找一个O(n)解决方案。“O(n)谓词的应用程序,和O(n log n)交换”,但我明白你的意思。@kop:公平地说,OP的代码不是在O(n)中运行的也可以。这已经忽略了所有那些越界的数组访问。现在,在绝大多数情况下,如果开发人员(尤其是初学者)要求修复原始循环,答案是用预构建的算法替换它。@IInspectable足够公平,但当问到O(n)时提供O(n log n)算法其中一个(没有在答案中注明时间复杂性)并不适合我,虽然我同意这个问题的更好解决方案(参见提出的问题)是一个标准化算法,但初学者编写类似于改进版OPs的代码(比如,使用较少的UB)是有一定价值的。