一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

看點:數組開小了、運行時間過長怎么辦?解決方法

來源:CSDN 時間:2023-03-09 08:56:37

論點一: 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;="" }}

當然,數組開小并不是唯一的錯誤,像運行時間過長(代碼冗長、方法沒用對、情況考慮不到位以至于計算范圍得擴大)這些問題還是存在的,但這些問題的解決方案也還是只有自己,修改代碼。就像在做廣搜的題時,你用深搜的方法去做,一一列舉,如此,就有可能時間超限。

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 澜沧| 繁昌县| 乾安县| 韶关市| 甘孜县| 叶城县| 宁强县| 连云港市| 科尔| 依安县| 淮阳县| 德江县| 手游| 荣成市| 舞钢市| 安丘市| 五常市| 洱源县| 永康市| 新乐市| 塘沽区| 乌拉特中旗| 沙田区| 瓦房店市| 桐梓县| 凉山| 双江| 涪陵区| 华阴市| 文安县| 昌图县| 新沂市| 镇赉县| 贵阳市| 乌拉特中旗| 白城市| 武鸣县| 临邑县| 佛坪县| 花垣县| 安新县|