程式碼長這樣
#include<iostream>
using namespace std;
main()
{
int n=1,a,b,i,j;
while(cin >> a >> b)
{
cout << "Case #" << n++ << " :\n";
int map[a][b];
for(i=0;i<a;i++)
for(j=0;j<b;j++)
cin >> map[i][j];
int sum[a][b];
sum[0][0]=0;
for(i=1;i<a;i++)
sum[0][i]=sum[0][i-1]+map[0][i];
for(i=1;i<b;i++)
sum[i][0]=sum[i-1][0]+map[i][0];
for(i=1;i<a;i++)
for(j=1;j<b;j++)
{
sum[i][j]=sum[i-1][j];
if(sum[i][j-1]<sum[i][j])
sum[i][j]=sum[i][j-1];
sum[i][j]+=map[i][j];
}
cout << sum[a-1][b-1] << endl;
}
}
程式碼長這樣
#include
using namespace std;
main()
{
int n=1,a,b,i,j;
while(cin >> a >> b)
{
cout << "Case #" << n++ << " :\n";
int map[a][b];
for(i=0;i<a;i++)
for(j=0;j<b;j++)
cin >> map[i][j];
int sum[a][b];
sum[0][0]=0;
for(i=1;i<a;i++)
sum[0][i]=sum[0][i-1]+map[0][i];
for(i=1;i<b;i++)
sum[i][0]=sum[i-1][0]+map[i][0];
for(i=1;i<a;i++)
for(j=1;j<b;j++)
{
sum[i][j]=sum[i-1][j];
if(sum[i][j-1]<sum[i][j])
sum[i][j]=sum[i][j-1];
sum[i][j]+=map[i][j];
}
cout << sum[a-1][b-1] << endl;
}
}
問題出在「int map[a][b]」這一行
電腦是先呼叫記憶體才吃輸入,因此在申請記憶體時電腦其實不知道a和b的值,所以就隨便申請一個數字。
如果他申請的數字小於a或b的話就會出現記憶體區段錯誤。
建議一開始就設成最大值(int map[101][101])
希望有幫助