鱼C论坛

 找回密码
 立即注册
查看: 805|回复: 4

[已解决]不懂为什么程序无法运行

[复制链接]
发表于 2020-11-6 12:43:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

代码
#include <iostream>
using namespace std;
int main()
{
        int lamb[2000001]={};   
        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[int(a*j)]==0) lamb[int(a*j)]=1;
                        else lamb[int(a*j)]=0;
                }
        }
        
        for (i=0;; i++)
        {
                if (lamb[i]==1)   //找出开着的灯并输出编号 
                {
                        cout<<i;
                        break; 
                }
        }
        return 0;
 } 
最佳答案
2020-11-6 18:08:02
不爱听课的同学 发表于 2020-11-6 16:32
为什么答案这串代码能运行呢?


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

其次
在函数里分配 2百万 的数组是在栈里分配的,这个数值有点大,导致堆栈溢出 stack overflow
而全局数组是事先分配的静态内存,不使用堆栈,不会发生堆栈溢出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-6 15:02:25 | 显示全部楼层
 int lamb[2000001]={};   
两百万的数组是不可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-6 16:32:18 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-11-6 15:02
两百万的数组是不可以的


为什么答案这串代码能运行呢?
#include<bits/stdc++.h>
using namespace std;
int a[2000001],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[int(j*x)]==0) a[int(j*x)]=1;
                        else a[int(j*x)]=0;
                }
        }
        for(int i=1;;i++){
                if(a[i]==1){
                        cout<<i;
                        break;
                }
        }
        return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-6 18:08:02 | 显示全部楼层    本楼为最佳答案   
不爱听课的同学 发表于 2020-11-6 16:32
为什么答案这串代码能运行呢?


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

其次
在函数里分配 2百万 的数组是在栈里分配的,这个数值有点大,导致堆栈溢出 stack overflow
而全局数组是事先分配的静态内存,不使用堆栈,不会发生堆栈溢出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-6 22:30:09 | 显示全部楼层
虽然现在技术进步了,还请不要浪费资源
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 17:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表