【问题标题】:Infinite run time无限运行时间
【发布时间】:2018-09-04 01:22:24
【问题描述】:

对于 Ubuntu 16.04 中的以下代码

用于自定义测试用例

4 3

1 2 3 7

我的运行时间是无限的,没有输出。 (没有输出意味着'a'也没有打印在控制台上)。但是,当我评论函数调用 foo

// int temp = foo(ab, 0, n-1);

我得到输出

一个##

我错过了无限运行时间并且没有输出的原因是什么?

#include<bits/stdc++.h>

using namespace std;

int a[1000000];

int foo(int x, int f, int l)
{
    int m = (f+l)/2;
    while(f<=l)
    {
        if(a[m]==x)
            return 1;
        else if(a[m]<x)
            f = m+1;
        else if(a[m]>x)
            l = m-1;
    }
    return 0;
}

int main()
{
    int n, x;
    cin >> n;
    cin >> x;
    int i=0;
    for (i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    cout<<'a';
    sort(a,a+n);
    for(i=0; i<n-1; i++)
    {
        if(a[i]==a[i+1])
        {
            cout << 0;
            return 0;
        }
    }
    cout<<'#';

    int ab = a[i];
    int temp = foo(ab, 0, n-1);
    cout<<'#';
    return 0;
}

【问题讨论】:

    标签: c++


    【解决方案1】:

    您没有得到任何输出(甚至没有'a')的原因是stdout 被缓冲了。通常它是行缓冲的,这意味着它只会在写入新行时打印。

    您可以通过执行std::cout &lt;&lt; std::flush; 来强制缓冲区中的任何内容立即打印出来,或者例如在您的情况下,std::cout &lt;&lt; 'a' &lt;&lt; std::flush; 会起作用。

    【讨论】:

      【解决方案2】:

      无限循环的原因是您的fl 值最多更新一次。最初m 指向数组的中间(即(n-1)/2),从那一刻起,
      -如果元素a[m]小于x,则无限分配m+1,即(n-1)/2 + 1tof
      -如果元素a[m]大于x,则无限地将(n-1)/2 - 1分配给l

      在任何一种情况下,f 永远不会大于ll 永远不会小于f(除非数组只有一个元素或者它有两个元素和x&lt;a[0]

      尝试通过以下方式更新函数:

      int foo(int x, int f, int l)
      {
          int m = (f+l)/2;
          while(f<=l)
          {
              if(a[m]==x)
                  return 1;
              else if(a[m]<x)
                  { 
                     f = m+1; m = f; 
                  }
              else if(a[m]>x)  
                  {
                     l = m-1; m = l;
                  }
          }
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-04-24
        • 1970-01-01
        • 1970-01-01
        • 2013-09-04
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多