這是做oj時候的問題。
#include <stdio.h>
int main(){
int a;
while(~scanf("%d",&a)){
int b[a],c[a];
for(int i=0;i<a;i++){
scanf("%d",&b[i]);
}
for(int i=0;i<a;i++){
c[i]=0;
}
for(int i=0;i<a-1;i++){
for(int j=i+1;j<a;j++){
if(b[i]==b[j])c[i]++;
}
}
int max=c[0];
for(int i=1;i<a;i++){
if(c[i]>max)max=c[i];
}
printf("%d",max+1);
}
return 0;
}
這個代碼我電腦上是可以編譯的,然后提交上去后就說編譯錯誤,具體是這個樣子的:
0_0_35177313_6881.c
0_0_35177313_6881.c(5) : error C2057: 應輸入常量運算式
0_0_35177313_6881.c(5) : error C2466: 不能分配常量大小為 0 的陣列
0_0_35177313_6881.c(5) : error C2133: “b”: 未知的大小
0_0_35177313_6881.c(5) : error C2133: “c”: 未知的大小。
我也不知道為什么求大佬教教我,感激
uj5u.com熱心網友回復:
c/c++ 要求陣列的大小必須是常量值,所以int b[a],c[a];這樣是不行的,如果想使用動態陣列,可使用malloc分配記憶體比如:
int a;
scanf("%d",&a);
int b=malloc(sizeof(int)*a);這樣的形式
uj5u.com熱心網友回復:
動態陣列的修改如下,供參考:#include <stdio.h>
int main(){
int a;
while(~scanf("%d",&a)){
//int b[a],c[a];
int *b = (int *)malloc(sizeof(int)*a);
int *c = (int *)malloc(sizeof(int)*a);
for(int i=0;i<a;i++){
scanf("%d",&b[i]);
}
for(int i=0;i<a;i++){
c[i]=0;
}
for(int i=0;i<=a-1;i++){ //for(int i=0;i<a-1;i++){
for(int j=i+1;j<a;j++){
if(b[i]==b[j])c[i]++;
}
}
int max=c[0];
for(int i=1;i<a;i++){
if(c[i]>max)max=c[i];
}
printf("%d",max+1);
free(b);
free(c);
}
return 0;
}
uj5u.com熱心網友回復:
c99版本可以,也可以用記憶體分配函式 malloc calloc轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251196.html
標籤:新手樂園
