30/09/2018, 17:06
Tại sao khi vào hàm thì mảng 2 chiều bị clear hết
#include <stdio.h>
#define max2(a,b) (a>b)?a:b
#define max3(a,b,c) max2(max2(a,b),c)
int maxArray(int a[], int n)
{
int i;
int max=0;
for (i=1;i<=n;i++)
max=max2(max,a[i]);
return max;
}
void input(int a[][100],int &m, int &n)
{
int i,j;
printf("Hay nhap so tang: ");
scanf("%i",&m);
printf("Hay nhap so phong moi tang: ");
scanf("%i",&n);
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
scanf("%i",&a[i][j]);
}
int findRoad(int L[][100], int a[][100], int m, int n)
{
int i,j;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
L[i][j]=a[i][j]+max3(L[i-1][j-1],L[i-1][j],L[i-1][j+1]);
return maxArray(L[m],n);
}
int main()
{
int m,n;
int L[100][100]={0};
int a[100][100]={0};
input(a,m,n);
int s=findRoad(L,a,m,n);
printf("Gia tri lon nhat la: %i",s);
getchar();
getchar();
return 0;
}
hàm input vẫn bình thường, vào hàm main mảng a vẫn còn, sau khi nhảy vào hàm findRoad thì bị clear hết
Mình thử mang ra hàm main thì thằng L cũng không thay đổi giá trị.
mình kiếm ra lỗi rồi nhưng không biết vì sao mọi người giải thích giùm mình luôn nhé
sai ở #define max3
nếu viết một hàm int max3
thì chương trình chạy đúng kết quả
int max3so(int a, int b, int c)
{
return max2(max2(a,b),c);
}
@ltd @thanhmssl10 @david15894
Bài liên quan
Đặt tên biến khó hiểu quá
kiểm tra thử ở cuối hàm
input
gía trị của mảng a là gì?nhảy ra khỏi hàm input thì nó vẫn còn giá trị anh ơi. Nhảy vào hàm findRoad thì a bị chuyển thành mảng 1 chiều hay sao ấy (địa chỉ của a vẫn giống, có điều trong bảng locals thì không xem được các giá trị)
À nhầm, vẫn chưa được
Mà bác muốn kết quả như nào thế, em chạy code gốc nó tím ra đúng số lớn nhất mà
printf dùng %i hay %d như nhau, nhưng scanf dùng %i thì hình như nó tự chuyển hệ 10 sang 8 thì phải
input:
output:
@david15894 compile giùm em với :(( chả hiểu sao thằng L không có giá trị nào cả
@thanhmssl10 mới up lại code nhé ~~
mảng L toàn = 0 hết thì tìm max sao nhỉ tìm max trong mảng a chứ
có cộng a[i][j] vào mà. ít nhất cũng phải có giá trị a[i][j] chứ nhỉ :((
Em không hiểu lắm, sao mảng
L
lúc đầu là 2 chiềuL[i][j]
mà lại dùng hàm tìm maxArray có 1 chiều thôiL[m]
à, tại vì anh chỉ muốn tìm max ở một tầng thôi (tầng cuối m)
kiếm ra lỗi rồi nhưng không biết vì sao mọi người giải thích giùm mình luôn nhé
sai ở
#define max3
nếu viết một hàm int thì đúng hoàn toànHàm max em thấy chạy ổn đấy chứ
nếu anh viết hàm int max3 mới như sau thì chương trình chạy đúng kết quả :(( còn viết kiểu define thì tạch luôn
2 thử 2 hàm max cho kết quả giá trị các max hệt nhau
Vậy mà:
Vì max2 không có đóng ngoặc nên nó tính a…+L sau đó so sánh nên kết quả là L đầu của max3= 0. Ngược lại khi có hàm thì nó tìm max sau đó mới cộng a vào.
Oh sh*i, thế là vấn đề “chỉ là” 2 dấu ngoặc sao , @Rok_Hoang thêm code gốc 2 dấu ngoặc là xong
ồ không để ý thằng define này
cảm ơn mọi người nhé