#28831: 求救..不知道要怎麼改


yudie (yudie)

學校 : 不指定學校
編號 : 179358
來源 : [111.82.240.237]
最後登入時間 :
2024-01-08 06:31:27
c462. apcs 交錯字串 (Alternating Strings) -- apcs | From: [220.132.214.229] | 發表日期 : 2022-01-07 00:09

小弟我今天做了一整天不知道為什麼一直觸發

記憶體區段錯誤! Segmentation fault (core dumped)

系統呼叫了 abort 函式!
*** stack smashing detected ***:  terminated
Aborted (core dumped)

 

求大佬們指點迷津!!!

以下是我的程式碼:

#include <stdio.h>

#include <string.h>

int distinguish(int a){

 

if (97<=a&&a<=122){

return 1;

}

if (65<=a&&a<=90){

return 2;

}

if (a=='\n'||a=='\0'){

return 0;

}

}

int F(int a[] ,int i ,int k ,int m){

if(i==m-1)return 0; 

for(int j=1;j<k;j++){

if(a[i]!=a[i+j]){

 

return 0;

}

if(j==k-1&&a[i]==a[i+k]){

return 1;

}

if(a[i]==a[i+k]){

return 0;

}

if(j==k-1&&a[i]!=a[i+k]){

return 1+F(a,i+k,k,m);

}

 

}

if(k==1){

 

if(a[i]!=a[i+1]){

return 1+F(a,i+1,k,m);

} else{

if(i!=0&&a[i]!=a[i-1])return 1;

return 0;

}

}

return 0;

}

int C(int a[] ,int m ,int k ){

 

int v=0;

for(int i=0;i<m;i++){

 

if(v<F(a,i,k,m)){

 

v=F(a,i,k,m);

}

 

}

return v;

}

 

 

int main(){

 

char str_1[10000];

 

int m=0;

int k;

scanf("%d",&k);

 

scanf("%s",&str_1);

m=strlen(str_1)-1;

int nbr[m];

 

 

for(int i=0;i<m;i++){

nbr[i]=distinguish((int)str_1[i]); 

}

int t=0;

t=k*C(nbr,m,k);

printf("%d",t);

 

return 0;

 
#28832: Re:求救..不知道要怎麼改


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
c462. apcs 交錯字串 (Alternating Strings) -- apcs | From: [39.10.69.93] | 發表日期 : 2022-01-07 09:28

小弟我今天做了一整天不知道為什麼一直觸發

記憶體區段錯誤! Segmentation fault (core dumped)

系統呼叫了 abort 函式!
*** stack smashing detected ***:  terminated
Aborted (core dumped)

 

求大佬們指點迷津!!!

以下是我的程式碼:

#include

#include

int distinguish(int a){

 

if (97<=a&&a<=122){

return 1;

}

if (65<=a&&a<=90){

return 2;

}

if (a=='\n'||a=='\0'){

return 0;

}

}

int F(int a[] ,int i ,int k ,int m){

if(i==m-1)return 0; 

for(int j=1;j<k;j++){

if(a[i]!=a[i+j]){

 

return 0;

}

if(j==k-1&&a[i]==a[i+k]){

return 1;

}

if(a[i]==a[i+k]){

return 0;

}

if(j==k-1&&a[i]!=a[i+k]){

return 1+F(a,i+k,k,m);

}

 

}

if(k==1){

 

if(a[i]!=a[i+1]){

return 1+F(a,i+1,k,m);

} else{

if(i!=0&&a[i]!=a[i-1])return 1;

return 0;

}

}

return 0;

}

int C(int a[] ,int m ,int k ){

 

int v=0;

for(int i=0;i<m;i++){

 

if(v<F(a,i,k,m)){

 

v=F(a,i,k,m);

}

 

}

return v;

}

 

 

int main(){

 

char str_1[10000];

 

int m=0;

int k;

scanf("%d",&k);

 

scanf("%s",&str_1);

m=strlen(str_1)-1;

int nbr[m];

 

 

for(int i=0;i<m;i++){

nbr[i]=distinguish((int)str_1[i]); 

}

int t=0;

t=k*C(nbr,m,k);

printf("%d",t);

 

return 0;


字串長度最大100000,你陣列開太小了

 
ZeroJudge Forum