Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的for循环只运行了2次而不是10次?_C++ - Fatal编程技术网

C++ 为什么我的for循环只运行了2次而不是10次?

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

我试图找到数组中空间和时间复杂度为O(n)的第三高数。 我的程序显然是错误的,但这不是问题所在。
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)是有一定价值的。