#3023: 記憶體區段錯誤


b821213 (後繼無人)

學校 : 臺南市私立興國高級中學
編號 : 9916
來源 : [157.107.107.134]
最後登入時間 :
2021-09-14 02:53:36
d578. 小涵的積木 | From: [203.68.26.3] | 發表日期 : 2009-12-17 15:30

雖然這題是12/14PO上來的新題目 不過到現在為止還沒有人成功ac

我自己嘗試之後只有第一個測試點通過...而且後面的測資點全部都是re 實在讓我很不解

#include <stdio.h>

void compare(char s[][2000],char temp[],int fors[])
{int i,j;
 int boolok;
 
 for(i=0;i<50;i++){
   boolok=1;
   for(j=0;j<2000;j++){
     if(temp[j]!=s[i][j]&&temp[j]!=10){boolok=0;}
   }
   if(boolok==1){fors[i]++;break;} 
 }  
 if(boolok==0){
   for(i=0;s[i][0]!=0;i++);
   for(j=0;temp[j]!=0;j++){s[i][j]=temp[j];}
   fors[i]++;  
 
 }

}
int main(){
    char s[50][2000];
    char temp[2000];
    int fors[50];
    int m,n;
    int i,j;
   
    scanf("%d %d ",&m,&n);
    while (m>0){
      for(i=0;i<50;i++){
        fors[i]=0;
        for(j=0;j<2000;j++){s[i][j]=0;}   
      } 
      for(i=0;i<n*m-1;i++){
        for(j=0;j<2000;j++){temp[j]=0;}
        for(j=0;j<2000;j++){
          scanf("%c",&temp[j]);
          if(temp[j]==10) {break;}
        }
        compare(s,temp,fors);     
      }       
    for(i=0;i<50;i++){ if(fors[i]<n){break;}}
    for(j=0;s[i][j]!=0;j++) {printf("%c",s[i][j]);}       
    scanf("%d %d ",&m,&n);
    }
   return 0;
}

說明上寫著最有可能是呼叫範圍外的陣列造成的 可是就算我的break都沒有生效 迴圈內的範圍也一定在陣列裡面,尤其我的陣列還設得很大了= =

不知道有沒有人曾經在別題遇過這種情形或者是同一題遇到這種狀況 能不能分享一下解決方法?

 
#3033: Re:記憶體區段錯誤


magrady (元元)

學校 : 臺北市立第一女子高級中學
編號 : 1445
來源 : [114.34.203.11]
最後登入時間 :
2024-01-15 00:19:19
d578. 小涵的積木 | From: [163.32.78.61] | 發表日期 : 2009-12-18 13:57

雖然這題是12/14PO上來的新題目 不過到現在為止還沒有人成功ac

我自己嘗試之後只有第一個測試點通過...而且後面的測資點全部都是re 實在讓我很不解

#include

void compare(char s[][2000],char temp[],int fors[])
{int i,j;
 int boolok;
 
 for(i=0;i<50;i++){
   boolok=1;
   for(j=0;j<2000;j++){
     if(temp[j]!=s[i][j]&&temp[j]!=10){boolok=0;}
   }
   if(boolok==1){fors[i]++;break;} 
 }  
 if(boolok==0){
   for(i=0;s[i][0]!=0;i++);
   for(j=0;temp[j]!=0;j++){s[i][j]=temp[j];}
   fors[i]++;  
 
 }

}
int main(){
    char s[50][2000];
    char temp[2000];
    int fors[50];
    int m,n;
    int i,j;
   
    scanf("%d %d ",&m,&n);
    while (m>0){
      for(i=0;i<50;i++){
        fors[i]=0;
        for(j=0;j<2000;j++){s[i][j]=0;}   
      } 
      for(i=0;i        for(j=0;j<2000;j++){temp[j]=0;}
        for(j=0;j<2000;j++){
          scanf("%c",&temp[j]);
          if(temp[j]==10) {break;}
        }
        compare(s,temp,fors);     
      }       
    for(i=0;i<50;i++){ if(fors[i]    for(j=0;s[i][j]!=0;j++) {printf("%c",s[i][j]);}       
    scanf("%d %d ",&m,&n);
    }
   return 0;
}

說明上寫著最有可能是呼叫範圍外的陣列造成的 可是就算我的break都沒有生效 迴圈內的範圍也一定在陣列裡面,尤其我的陣列還設得很大了= =

不知道有沒有人曾經在別題遇過這種情形或者是同一題遇到這種狀況 能不能分享一下解決方法?

for(i=0;s[i][0]!=0;i++);

噢看起來,這一行可能有一點點問題XD( 超不負責任發言~)

 

 
#3035: Re:記憶體區段錯誤


b821213 (後繼無人)

學校 : 臺南市私立興國高級中學
編號 : 9916
來源 : [157.107.107.134]
最後登入時間 :
2021-09-14 02:53:36
d578. 小涵的積木 | From: [118.233.173.190] | 發表日期 : 2009-12-18 22:26

雖然這題是12/14PO上來的新題目 不過到現在為止還沒有人成功ac

我自己嘗試之後只有第一個測試點通過...而且後面的測資點全部都是re 實在讓我很不解

#include

void compare(char s[][2000],char temp[],int fors[])
{int i,j;
 int boolok;
 
 for(i=0;i<50;i++){
   boolok=1;
   for(j=0;j<2000;j++){
     if(temp[j]!=s[i][j]&&temp[j]!=10){boolok=0;}
   }
   if(boolok==1){fors[i]++;break;} 
 }  
 if(boolok==0){
   for(i=0;s[i][0]!=0;i++);
   for(j=0;temp[j]!=0;j++){s[i][j]=temp[j];}
   fors[i]++;  
 
 }

}
int main(){
    char s[50][2000];
    char temp[2000];
    int fors[50];
    int m,n;
    int i,j;
   
    scanf("%d %d ",&m,&n);
    while (m>0){
      for(i=0;i<50;i++){
        fors[i]=0;
        for(j=0;j<2000;j++){s[i][j]=0;}   
      } 
      for(i=0;i        for(j=0;j<2000;j++){temp[j]=0;}
        for(j=0;j<2000;j++){
          scanf("%c",&temp[j]);
          if(temp[j]==10) {break;}
        }
        compare(s,temp,fors);     
      }       
    for(i=0;i<50;i++){ if(fors[i]    for(j=0;s[i][j]!=0;j++) {printf("%c",s[i][j]);}       
    scanf("%d %d ",&m,&n);
    }
   return 0;
}

說明上寫著最有可能是呼叫範圍外的陣列造成的 可是就算我的break都沒有生效 迴圈內的範圍也一定在陣列裡面,尤其我的陣列還設得很大了= =

不知道有沒有人曾經在別題遇過這種情形或者是同一題遇到這種狀況 能不能分享一下解決方法?

for(i=0;s[i][0]!=0;i++);

噢看起來,這一行可能有一點點問題XD( 超不負責任發言~)

 

我的s陣列都有歸零 而且還超出輸入範圍將近兩倍呢...所以這個跳出條件一定會發生阿QQ

(PS 我再自己電腦上執行一點問題都沒有)

然後後面的分號代表沒有執行的片段啦!不需要就這樣就好了

(不然他會誤判下一行是for的執行內容)

 
#3078: Re:記憶體區段錯誤


magrady (元元)

學校 : 臺北市立第一女子高級中學
編號 : 1445
來源 : [114.34.203.11]
最後登入時間 :
2024-01-15 00:19:19
d578. 小涵的積木 | From: [163.32.78.61] | 發表日期 : 2009-12-21 13:05

雖然這題是12/14PO上來的新題目 不過到現在為止還沒有人成功ac

我自己嘗試之後只有第一個測試點通過...而且後面的測資點全部都是re 實在讓我很不解

#include

void compare(char s[][2000],char temp[],int fors[])
{int i,j;
 int boolok;
 
 for(i=0;i<50;i++){
   boolok=1;
   for(j=0;j<2000;j++){
     if(temp[j]!=s[i][j]&&temp[j]!=10){boolok=0;}
   }
   if(boolok==1){fors[i]++;break;} 
 }  
 if(boolok==0){
   for(i=0;s[i][0]!=0;i++);
   for(j=0;temp[j]!=0;j++){s[i][j]=temp[j];}
   fors[i]++;  
 
 }

}
int main(){
    char s[50][2000];
    char temp[2000];
    int fors[50];
    int m,n;
    int i,j;
   
    scanf("%d %d ",&m,&n);
    while (m>0){
      for(i=0;i<50;i++){
        fors[i]=0;
        for(j=0;j<2000;j++){s[i][j]=0;}   
      } 
      for(i=0;i        for(j=0;j<2000;j++){temp[j]=0;}
        for(j=0;j<2000;j++){
          scanf("%c",&temp[j]);
          if(temp[j]==10) {break;}
        }
        compare(s,temp,fors);     
      }       
    for(i=0;i<50;i++){ if(fors[i]    for(j=0;s[i][j]!=0;j++) {printf("%c",s[i][j]);}       
    scanf("%d %d ",&m,&n);
    }
   return 0;
}

說明上寫著最有可能是呼叫範圍外的陣列造成的 可是就算我的break都沒有生效 迴圈內的範圍也一定在陣列裡面,尤其我的陣列還設得很大了= =

不知道有沒有人曾經在別題遇過這種情形或者是同一題遇到這種狀況 能不能分享一下解決方法?

for(i=0;s[i][0]!=0;i++);

噢看起來,這一行可能有一點點問題XD( 超不負責任發言~)

 

我的s陣列都有歸零 而且還超出輸入範圍將近兩倍呢...所以這個跳出條件一定會發生阿QQ

(PS 我再自己電腦上執行一點問題都沒有)

然後後面的分號代表沒有執行的片段啦!不需要就這樣就好了

(不然他會誤判下一行是for的執行內容)

其實我不是在說那個分號XD

不過有人AC囉! (測資應該沒問題~)

 
#3141: Re:記憶體區段錯誤


b821213 (後繼無人)

學校 : 臺南市私立興國高級中學
編號 : 9916
來源 : [157.107.107.134]
最後登入時間 :
2021-09-14 02:53:36
d578. 小涵的積木 | From: [203.68.26.149] | 發表日期 : 2009-12-30 13:47

雖然這題是12/14PO上來的新題目 不過到現在為止還沒有人成功ac

我自己嘗試之後只有第一個測試點通過...而且後面的測資點全部都是re 實在讓我很不解

#include

void compare(char s[][2000],char temp[],int fors[])
{int i,j;
 int boolok;
 
 for(i=0;i<50;i++){
   boolok=1;
   for(j=0;j<2000;j++){
     if(temp[j]!=s[i][j]&&temp[j]!=10){boolok=0;}
   }
   if(boolok==1){fors[i]++;break;} 
 }  
 if(boolok==0){
   for(i=0;s[i][0]!=0;i++);
   for(j=0;temp[j]!=0;j++){s[i][j]=temp[j];}
   fors[i]++;  
 
 }

}
int main(){
    char s[50][2000];
    char temp[2000];
    int fors[50];
    int m,n;
    int i,j;
   
    scanf("%d %d ",&m,&n);
    while (m>0){
      for(i=0;i<50;i++){
        fors[i]=0;
        for(j=0;j<2000;j++){s[i][j]=0;}   
      } 
      for(i=0;i        for(j=0;j<2000;j++){temp[j]=0;}
        for(j=0;j<2000;j++){
          scanf("%c",&temp[j]);
          if(temp[j]==10) {break;}
        }
        compare(s,temp,fors);     
      }       
    for(i=0;i<50;i++){ if(fors[i]    for(j=0;s[i][j]!=0;j++) {printf("%c",s[i][j]);}       
    scanf("%d %d ",&m,&n);
    }
   return 0;
}

說明上寫著最有可能是呼叫範圍外的陣列造成的 可是就算我的break都沒有生效 迴圈內的範圍也一定在陣列裡面,尤其我的陣列還設得很大了= =

不知道有沒有人曾經在別題遇過這種情形或者是同一題遇到這種狀況 能不能分享一下解決方法?

for(i=0;s[i][0]!=0;i++);

噢看起來,這一行可能有一點點問題XD( 超不負責任發言~)

 

我的s陣列都有歸零 而且還超出輸入範圍將近兩倍呢...所以這個跳出條件一定會發生阿QQ

(PS 我再自己電腦上執行一點問題都沒有)

然後後面的分號代表沒有執行的片段啦!不需要就這樣就好了

(不然他會誤判下一行是for的執行內容)

其實我不是在說那個分號XD

不過有人AC囉! (測資應該沒問題~)


我還是找不到錯誤阿....

大大能不能講仔細一點呢?

 
#3143: Re:記憶體區段錯誤


b821213 (後繼無人)

學校 : 臺南市私立興國高級中學
編號 : 9916
來源 : [157.107.107.134]
最後登入時間 :
2021-09-14 02:53:36
d578. 小涵的積木 | From: [203.68.26.149] | 發表日期 : 2009-12-30 15:54

雖然這題是12/14PO上來的新題目 不過到現在為止還沒有人成功ac

我自己嘗試之後只有第一個測試點通過...而且後面的測資點全部都是re 實在讓我很不解

#include

void compare(char s[][2000],char temp[],int fors[])
{int i,j;
 int boolok;
 
 for(i=0;i<50;i++){
   boolok=1;
   for(j=0;j<2000;j++){
     if(temp[j]!=s[i][j]&&temp[j]!=10){boolok=0;}
   }
   if(boolok==1){fors[i]++;break;} 
 }  
 if(boolok==0){
   for(i=0;s[i][0]!=0;i++);
   for(j=0;temp[j]!=0;j++){s[i][j]=temp[j];}
   fors[i]++;  
 
 }

}
int main(){
    char s[50][2000];
    char temp[2000];
    int fors[50];
    int m,n;
    int i,j;
   
    scanf("%d %d ",&m,&n);
    while (m>0){
      for(i=0;i<50;i++){
        fors[i]=0;
        for(j=0;j<2000;j++){s[i][j]=0;}   
      } 
      for(i=0;i        for(j=0;j<2000;j++){temp[j]=0;}
        for(j=0;j<2000;j++){
          scanf("%c",&temp[j]);
          if(temp[j]==10) {break;}
        }
        compare(s,temp,fors);     
      }       
    for(i=0;i<50;i++){ if(fors[i]    for(j=0;s[i][j]!=0;j++) {printf("%c",s[i][j]);}       
    scanf("%d %d ",&m,&n);
    }
   return 0;
}

說明上寫著最有可能是呼叫範圍外的陣列造成的 可是就算我的break都沒有生效 迴圈內的範圍也一定在陣列裡面,尤其我的陣列還設得很大了= =

不知道有沒有人曾經在別題遇過這種情形或者是同一題遇到這種狀況 能不能分享一下解決方法?

for(i=0;s[i][0]!=0;i++);

噢看起來,這一行可能有一點點問題XD( 超不負責任發言~)

 

我的s陣列都有歸零 而且還超出輸入範圍將近兩倍呢...所以這個跳出條件一定會發生阿QQ

(PS 我再自己電腦上執行一點問題都沒有)

然後後面的分號代表沒有執行的片段啦!不需要就這樣就好了

(不然他會誤判下一行是for的執行內容)

其實我不是在說那個分號XD

不過有人AC囉! (測資應該沒問題~)


我還是找不到錯誤阿....

大大能不能講仔細一點呢?


大大 還有我題目也不是很了解...

上面的n跟m如果沒有顛倒  則積木數量是只有幾種字串嗎?

是一組積木內字串都一樣 還是每一組積木內都有n種字串呢?

 
ZeroJudge Forum