您的位置:首页 > 数据 >
数组开小了、运行时间过长怎么办?解决方法|天天微速讯
来源:CSDN 2023-03-09 08:52:30

论点一: Runtime Error

这个在OpenJudge中可能很常见,但最多的情况为:数组开小了、运行时间过长(代码冗长、方法没用对、情况考虑不到位以至于计算范围得扩大)等等例如:

状态: Runtime Error 源代码: //此题解为 02:奇数单增序列


【资料图】

includeincludeusing namespace std;int a[10],b[10];int main(){    int m=0,x=0,y=0;    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)    scanf("%d",&a[i]);    for(int i=1;i<=n;i++)    {    if(a[i]%2!=0)     {        x++;    b[x]=a[i];     }      }      sort(b,b+x+1);      for(int i=1;i<=x-1;i++)      printf("%d,",b[i]);      printf("%d",b[x]);      }

修改后:

状态: Accepted

#include#includeusing namespace std;int a[5000],b[5000];int main(){    int m=0,x=0,y=0;    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)    scanf("%d",&a[i]);    for(int i=1;i<=n;i++)    {    if(a[i]%2!=0)     {        x++;    b[x]=a[i];     }      }      sort(b,b+x+1);      for(int i=1;i<=x-1;i++)      printf("%d,",b[i]);      printf("%d",b[x]);      }

察觉方法:1.注意读题,一般在题中都会提到某些未知数的范围,这时,我们就要注意,在开始写代码的时候就将数组大小调整好.也可以在代码写完后再读题、查错(但不建议这么做)。当然,还有一些‘懒猪’,在一开始时就将数组开得特别大(比如说。。。我~),但是,虽说这么做方便、快捷,但有时,还是会消耗许多时间,浪费许多空间。所以,我们都得一起努力,改掉这些坏习惯。(有则改之,无则加勉)在最后,我再给大家举一个典型的例子(数组开小):

状态: Runtime Error 源代码 //此题为 7218:献给阿尔吉侬的花束

#include#include#includeusing namespace std;int f[400][400],n,m,i,j;int head,tail,q[40005],p[40005],x,y,x1,y1,b[40005];int xx[10]={-1,0,1,0},yy[10]={0,-1,0,1};int main(){   int l;   scanf("%d",&l);    while(l--)     {         scanf("%d%d",&m,&n);        memset(f,0,sizeof(f));//清空         memset(b,0,sizeof(b));//清空         memset(p,0,sizeof(p));//清空         memset(q,0,sizeof(q));//清空         for (i=1;i<=m;i++)           {             char c[100];//***同志们注意看这里***             scanf("%s",c);//输入矩阵              for(j=1;j<=n;j++)            {                if (c[j-1]==".")                  f[i][j]=1;                if (c[j-1]=="#")                  f[i][j]=0;                if (c[j-1]=="S")                  {                    x=i; y=j;                    f[i][j]=1;//并改为1                   }                if (c[j-1]=="E")                  {                     x1=i; y1=j;                     f[i][j]=1;                  }            }           }        head=0;tail=1;p[tail]=x;q[tail]=y;b[tail]=0;// i,j 初始位置         bool pd=0;        while (head0&&l<=m&&r>0&&r<=n&&f[l][r]==1)                  {                      f[l][r]=0;                      tail++;                          p[tail]=l;                         q[tail]=r;                         b[tail]=b[head]+1;                  }                if (l==x1&&r==y1)                 {                     cout<<B[TAIL]<<ENDL; if="" pd="1;" break;="" }="" (pd="=true)" cout<<?oop!?<<endl;="" }}

修改后:

状态: Accepted 源代码

#include#include#includeusing namespace std;int f[400][400],n,m,i,j;int head,tail,q[40005],p[40005],x,y,x1,y1,b[40005];int xx[10]={-1,0,1,0},yy[10]={0,-1,0,1};int main(){   int l;   scanf("%d",&l);    while(l--)     {         scanf("%d%d",&m,&n);        memset(f,0,sizeof(f));//清空         memset(b,0,sizeof(b));//清空         memset(p,0,sizeof(p));//清空         memset(q,0,sizeof(q));//清空         for (i=1;i<=m;i++)           {             char c[4000];             scanf("%s",c);//输入矩阵              for(j=1;j<=n;j++)            {                if (c[j-1]==".")                  f[i][j]=1;                if (c[j-1]=="#")                  f[i][j]=0;                if (c[j-1]=="S")                  {                    x=i; y=j;                    f[i][j]=1;//并改为1                   }                if (c[j-1]=="E")                  {                     x1=i; y1=j;                     f[i][j]=1;                  }            }           }        head=0;tail=1;p[tail]=x;q[tail]=y;b[tail]=0;// i,j 初始位置         bool pd=0;        while (head0&&l<=m&&r>0&&r<=n&&f[l][r]==1)                  {                      f[l][r]=0;                      tail++;                          p[tail]=l;                         q[tail]=r;                         b[tail]=b[head]+1;                  }                if (l==x1&&r==y1)                 {                     cout<<B[TAIL]<<ENDL; if="" pd="1;" break;="" }="" (pd="=true)" cout<<?oop!?<<endl;="" }}

当然,数组开小并不是唯一的错误,像运行时间过长(代码冗长、方法没用对、情况考虑不到位以至于计算范围得扩大)这些问题还是存在的,但这些问题的解决方案也还是只有自己,修改代码。就像在做广搜的题时,你用深搜的方法去做,一一列举,如此,就有可能时间超限。

关键词:
相关文章
当前速讯:全国人大代表薛明耀:支持晋城煤层气高质量发展 加快能源革命探路领跑

当前速讯:全国人大代表薛明耀:支持晋城煤层气高

  长期以来我国天然气供需矛盾突出,预计2030碳达峰过程中,需求量仍将长期增长。  作为非常规天然气的重要补充,多年来,煤层气在保障国更多

2023-03-08 10:12:36
兖矿能源:3对智能化示范矿井通过验收

兖矿能源:3对智能化示范矿井通过验收

  近日,山东能源集团兖矿能源所属东滩煤矿、鲍店煤矿、金鸡滩煤矿分别通过山东省能源局、陕西省能源局组织的专家验收,达到了中级智能化示更多

2023-03-08 10:02:58
全国人大代表侯建国:推动煤炭与新能源融合发展 每日时讯

全国人大代表侯建国:推动煤炭与新能源融合发展

侯建国,第十四届全国人大代表、贵州盘江精煤股份有限公司山脚树矿党委副书记、矿长  记者:您获得过贵州省最美劳动者、全国煤炭行业青年五更多

2023-03-08 10:02:34
每日快报!全国政协委员李喜:加快晋陕蒙地区煤炭运输绿色转型

每日快报!全国政协委员李喜:加快晋陕蒙地区煤炭

  山西、陕西、内蒙古地区是我国主要的煤炭产地和煤炭调出区,也是我国大气污染防治的重要地区。如何缓解煤炭运输对周边环境的污染,成为全更多

2023-03-08 10:15:39
CCTD:三月中下旬动力煤市场运行展望|天天亮点

CCTD:三月中下旬动力煤市场运行展望|天天亮点

  由于前期上涨较快和需求跟进不足,3月以来动力煤市场快速走弱,随着价格跌至部分用户心理价位,交投活跃度有所提升,支撑市场情绪趋于平稳更多

2023-03-08 10:16:44
环球看热讯:国家能源集团铁路装备重载铁路智能运维工程研究中心揭牌

环球看热讯:国家能源集团铁路装备重载铁路智能运

  近日,国家能源集团铁路装备重载铁路智能运维技术铁路行业工程研究中心揭牌暨重载铁路运维数据产业链建设合作签约仪式在京举行。  国家更多

2023-03-07 10:57:13
河南能源枣园煤业通过国家一级安全生产标准化验收

河南能源枣园煤业通过国家一级安全生产标准化验收

  3月1日至2日,受国家矿山安全监察局委托,河南省工业和信息化厅组织10位权威专家组成验收组,对枣园煤业开展了一级安全生产标准化管理体系更多

2023-03-07 11:16:07
环球今日讯!开滦股份召开“一通三防”隐患排查会议

环球今日讯!开滦股份召开“一通三防”隐患排查会

  近日,开滦股份在范矿公司召开一通三防隐患排查会议。开滦股份总工程师、通风专业相关副总工程师及专业部室负责人,所属煤矿单位安全副总更多

2023-03-07 11:09:28
全球视讯!二连浩特口岸:持续提升通关效率 稳步增长过货量

全球视讯!二连浩特口岸:持续提升通关效率 稳步

  今年以来,二连浩特口岸紧抓进出口运量快速增长契机,着眼大通关、大过货、大落地,积极采取有效措施,增强通关能力,口岸进出口货运量稳更多

2023-03-07 10:12:59
统计局:2月下旬全国煤炭价格走势分化 视讯

统计局:2月下旬全国煤炭价格走势分化 视讯

  国家统计局日前公布的数据显示,2月下旬全国煤炭价格走势分化。各煤种具体价格变化情况如下:  无烟煤(洗中块,挥发份&le;8%)价格1705更多

2023-03-07 10:15:37