不爱听课的同学 发表于 2020-11-6 12:43:19

不懂为什么程序无法运行

程序无法运行,连输入都输不了,找了大半小时看不出哪里错了,求大佬解答
题目链接
https://www.luogu.com.cn/problem/P1161

代码
#include <iostream>
using namespace std;
int main()
{
        int lamb={};   
        int t,n;
        double a;
        cin>>n;
        int i,j;    //循环变量
       
        for (i=1; i<=n; i++)
        {
                cin>>a>>t;
                for (j=1; j<=t; j++)
                {
                        if (lamb==0) lamb=1;
                        else lamb=0;
                }
        }
       
        for (i=0;; i++)
        {
                if (lamb==1)   //找出开着的灯并输出编号
                {
                        cout<<i;
                        break;
                }
        }
        return 0;
}

小甲鱼的铁粉 发表于 2020-11-6 15:02:25

int lamb={};   
两百万的数组是不可以的{:10_250:}

不爱听课的同学 发表于 2020-11-6 16:32:18

小甲鱼的铁粉 发表于 2020-11-6 15:02
两百万的数组是不可以的

为什么答案这串代码能运行呢?
#include<bits/stdc++.h>
using namespace std;
int a,n;
double x,y;
int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
                cin>>x>>y;
                for(double j=1;j<=y;++j){
                        if(a==0) a=1;
                        else a=0;
                }
        }
        for(int i=1;;i++){
                if(a==1){
                        cout<<i;
                        break;
                }
        }
        return 0;
}

xieglt 发表于 2020-11-6 18:08:02

不爱听课的同学 发表于 2020-11-6 16:32
为什么答案这串代码能运行呢?

首先,
数组初始化错误
int lamb={};
应该写成
int lamb={0};

其次
在函数里分配 2百万 的数组是在栈里分配的,这个数值有点大,导致堆栈溢出 stack overflow
而全局数组是事先分配的静态内存,不使用堆栈,不会发生堆栈溢出。

风过无痕1989 发表于 2020-11-6 22:30:09

虽然现在技术进步了,还请不要浪费资源
页: [1]
查看完整版本: 不懂为什么程序无法运行