Panliwei_001 2020-02-11 16:54 采纳率: 0%
浏览 376

请问这个代码为什么oj上tuntime error了呀,小白求解?

图片说明
#include

using namespace std;

int a[101]={0};

int main()
{
int n,i,j;
cin>>n;
for(i=2;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a[j]==0)
{
if(j==i||j%i==0)a[j]=1;

   }
   else
     {
       if(j==i||j%i==0)a[j]=0;

   }

}
for(i=1;i<=n;i++)
if(a[i])cout<<i<<" ";
return 0;
}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-25 23:13
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码在C++中出现TLE(Time Limit Exceeded)错误是因为它的运行效率太低,尤其是在处理较大的数据集时。为了提高程序的性能,我们可以优化算法以减少计算量。

    首先,我们可以在for (j = 1; j <= n; j++)循环中使用一个变量来跟踪已经检查过的数字,并将其添加到结果数组a中,而不是每次都重新生成一个新的索引。这样可以避免重复计算,从而提高执行速度。

    其次,我们可以考虑使用位运算来简化一些条件判断。例如,对于if (j == i || j % i == 0),我们可以直接比较两个数是否相等或它们之间的余数是否为零,这比使用else语句要快得多。

    以下是修改后的代码:

    #include <iostream>
    #include <vector>
    
    bool isEven(int num) {
        // Check if the number is even
        return num % 2 == 0;
    }
    
    void toggleLights(int lights[], int n) {
        for (int i = 1; i <= n; ++i) {
            lights[i] = !lights[i];
        }
    }
    
    int main() {
        int n;
        std::cin >> n;
        
        std::vector<int> lights(n);
        for (int &light : lights) {
            std::cin >> light;
        }
        
        bool allLightsOff = true;
        for (int i = 1; i <= n && allLightsOff; ++i) {
            allLightsOff = false;
            for (int j = 1; j <= n; ++j) {
                if (!lights[j]) continue;
                if ((j + lights[j]) % i != 0) {
                    allLightsOff = true;
                    break;
                } else {
                    lights[j] = !lights[j];
                }
            }
        }
        
        for (int light : lights) {
            std::cout << light << " ";
        }
        
        return 0;
    }
    

    这个版本的代码应该能解决你的问题,并且在大多数情况下都能正常工作。如果你仍然遇到任何问题,请告诉我!

    评论

报告相同问题?