求解这段代码为什么会内存超限

Tony5t4rk 2017-12-05 12:16:13


#include <iostream>
int main()
{
int T,n,a,b,c;
std::cin>>T>>n>>a>>b>>c;
int *d;
d=new int[n];
int e[3];
e[0]=a;
e[1]=b;
e[2]=c;
for (int i = 0; i < n; ++i)
{
d[i]=0;
}
for (int i = 0; i < 3; ++i)
{
for (int j = 1; j <= n; ++j)
{
if (j%e[i]==0&&d[j-1]==0)
{
d[j-1]=1;
}
else if (j%e[i]==0&&d[j-1]==1)
{
d[j-1]=0;
}
}
}
int f=0;
for (int i = 0; i < n; ++i)
{
if (d[i]==1)
{
f++;
}
}
std::cout<<f;
return 0;
}
...全文
623 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tony5t4rk 2017-12-05
  • 打赏
  • 举报
回复
引用 2 楼 FancyMouse 的回复:
十分怀疑是评测机内部把128mb限制写成了128kb
使用1092 kb内存的代码可以正常通过,所以应该不是这个问题,应该是我写的代码还有别的问题,我觉得是数组开太大了,题上给的n的范围比较大
  • 打赏
  • 举报
回复
n/(a和b和c的最小公倍数)、.. 三者相加为z ================================ 这个没有三者,就一个,复制粘贴的问题。
  • 打赏
  • 举报
回复
d=new int[n];这行 根据题目说明,n可以大到1亿,此时需要分配将近400MB空间,当然超限了。 此题目实际上不需要逐一测试,可以直接计算: n/a、n/b、n/c(均为整除),三者相加为x n/(a和b的最小公倍数)、.. 三者相加为y n/(a和b和c的最小公倍数)、.. 三者相加为z 结果即为x-2y+z
paschen 2017-12-05
  • 打赏
  • 举报
回复
应该是程序使用的内存超过了其限制的大小,有时不必太执着于这些平台,可以自己写一些想写的小程序
Tony5t4rk 2017-12-05
  • 打赏
  • 举报
回复
引用 3 楼 jiht594 的回复:
不需要delete吗
不是,加上delete后还是内存超限,我先输入的n,然后用new定义了含有n个元素的数组,所以数组应该只有n个元素不会占用很大内存吧。。。。可能不是这里的问题? 没用delete以前用new定义动态数组也都成功了。
Tony5t4rk 2017-12-05
  • 打赏
  • 举报
回复
引用 3 楼 jiht594 的回复:
不需要delete吗
我都忘了delete了,我试试
Tony5t4rk 2017-12-05
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
应该是程序使用的内存超过了其限制的大小,有时不必太执着于这些平台,可以自己写一些想写的小程序
我是想参加ACM,学校要选拔,所以在这些OJ平台上练习
jiht594 2017-12-05
  • 打赏
  • 举报
回复
不需要delete吗
FancyMouse 2017-12-05
  • 打赏
  • 举报
回复
十分怀疑是评测机内部把128mb限制写成了128kb
Tony5t4rk 2017-12-05
  • 打赏
  • 举报
回复
引用 11 楼 DelphiGuy 的回复:
1亿个int就是4亿字节,大约381.47MB
多谢,Thanks♪(・ω・)ノ
  • 打赏
  • 举报
回复
1亿个int就是4亿字节,大约381.47MB
Tony5t4rk 2017-12-05
  • 打赏
  • 举报
回复
引用 7 楼 DelphiGuy 的回复:
d=new int[n];这行 根据题目说明,n可以大到1亿,此时需要分配将近400MB空间,当然超限了。 此题目实际上不需要逐一测试,可以直接计算: n/a、n/b、n/c(均为整除),三者相加为x n/(a和b的最小公倍数)、.. 三者相加为y n/(a和b和c的最小公倍数)、.. 三者相加为z 结果即为x-2y+z
明白了,确实是没有考虑n值的大小就开了数组,就算内存不限制时间我这么遍历计算时间也会超限的,所以不仅是数组没考虑n的大小而开的太大算法也有很大的问题 PS:“n可以大到1亿,此时需要分配将近400MB空间”求教这个是怎么计算出来的
内容概要:本文档介绍了基于MUC汇编语言的一个实验任务,旨在帮助学习者理解和掌握汇编指令执行过程及简单的算术操作。具体来说,文中描述了一个涉及四个步骤的实验流程:首先定义变量X,Y,Z以及用于存储中间或最终成果的位置W,这些都设定成八比特带有标记位数字(即所谓的“带符号”),紧接着通过特定编码方式实现基本数学函数比如加法、减法及其组合,然后逐步解释每一句关键命令的功能和它对应的实际物理意义,其中包括加载所需数据进内存单元里供CPU取指,设置段地址映射,进行数值累加之差额求解等等,最后借助于模拟器或真实的PC机器来检验编译链接后源程序能否顺利达成既定目标任务并且展示一些常见故障案例像是溢出处理等。 适用人群:主要针对正在学习汇编语言或是对计算机底层架构有一定兴趣的人士,特别是初学者或者是希望通过实例加深对汇编理解的学生群体。 使用场景及目标:该材料可用于课堂授课、个人自学以及作为参考手册。目的是让参与者学在PC环境中创建、编译和测试小型的应用程序,尤其是那些涉及到直接硬件操作的应用场景。此外,对于想要深入了解计算机科学基础概念的人而言,这份资料也有助于理解CPU的工作机制及汇编级别代码的作用。 其他说明:文内还包括了一些具体的代码演示片段和实际执行过程截图,以便更好地解释各个阶段的操作细节;同时提出若干思考题以鼓励进一步探讨,如当发生数值超限时系统如何响应,是否需要考虑负数表示等因素。总体上看,《实验二》不仅是技术指南还是一份有助于构建全面认识的重要文献。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧