鱼C论坛

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

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

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

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

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

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

代码
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int lamb[2000001]={};   
  6.         int t,n;
  7.         double a;
  8.         cin>>n;
  9.         int i,j;    //循环变量
  10.        
  11.         for (i=1; i<=n; i++)
  12.         {
  13.                 cin>>a>>t;
  14.                 for (j=1; j<=t; j++)
  15.                 {
  16.                         if (lamb[int(a*j)]==0) lamb[int(a*j)]=1;
  17.                         else lamb[int(a*j)]=0;
  18.                 }
  19.         }
  20.        
  21.         for (i=0;; i++)
  22.         {
  23.                 if (lamb[i]==1)   //找出开着的灯并输出编号
  24.                 {
  25.                         cout<<i;
  26.                         break;
  27.                 }
  28.         }
  29.         return 0;
  30. }
复制代码

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


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

其次
在函数里分配 2百万 的数组是在栈里分配的,这个数值有点大,导致堆栈溢出 stack overflow
而全局数组是事先分配的静态内存,不使用堆栈,不会发生堆栈溢出。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-6 15:02:25 | 显示全部楼层
  1. int lamb[2000001]={};   
复制代码

两百万的数组是不可以的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


为什么答案这串代码能运行呢?
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a[2000001],n;
  4. double x,y;
  5. int main(){
  6.         cin>>n;
  7.         for(int i=1;i<=n;i++){
  8.                 cin>>x>>y;
  9.                 for(double j=1;j<=y;++j){
  10.                         if(a[int(j*x)]==0) a[int(j*x)]=1;
  11.                         else a[int(j*x)]=0;
  12.                 }
  13.         }
  14.         for(int i=1;;i++){
  15.                 if(a[i]==1){
  16.                         cout<<i;
  17.                         break;
  18.                 }
  19.         }
  20.         return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

其次
在函数里分配 2百万 的数组是在栈里分配的,这个数值有点大,导致堆栈溢出 stack overflow
而全局数组是事先分配的静态内存,不使用堆栈,不会发生堆栈溢出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-6 22:30:09 | 显示全部楼层
虽然现在技术进步了,还请不要浪费资源
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-13 10:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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