编程遇到的一个问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 18:29:29
在vc 6.0当中,编译程序的时候总是得不到预想的结果,然后我调试运行了以下程序,发现右边的变量的值根本无法赋值给左边的变量.这是一个动态规划的题目,其中有一行是:m[i][j]=m[i][k]+m[k+1][j]+sum(i,j);
当i=1,j=6的时候,我用cout输出m[i][k]的值是0,m[k+1][j]的值是30,sum(i,j)的返回值也是30,但是用cout输出m[i][j]的值却是等于-858458658,明显m[i][j]的值没有被赋值,为什么会出现这种情况?
请大家尽量说说你们认为的可能原因吧,
代码在这里了:
#include<iostream>
#define N 6
using namespace std;
int sum(int x,int y,int *b)
{ int i,temp=0;
for(i=x;i<y+1;i++)
temp=temp+b[i];
return temp;}
int main()
{ int a[2*N],k,i,j=0,max;
int ma[N*2][2*N];
cout<<"初始化n个石堆:";
for(i=0;i<N;i++)
{
cin>>a[i];
a[N+i]=a[i];
ma[i][i]=0;
}
for(i=1;i<N;i++)
{
for(j=0;j<2*N-i;j++)
{
ma[j][j+i]=ma[j][j]+ma[j+1][j+i]+sum(j,j+i,a);
for(k=1;k<i;k++)
{
max=ma[j][j+k]+ma[j+k+1][j+i]+sum(j,j+i,a);
if(ma[j][j+i]<max)

最好把程序贴出了呀,让大家调试一下,一个表达式怎么看?

使用中间变量断点跟踪一下;
int a = m[i][k];
int b = m[k+1][j];
int c = sum(i,j);
m[i][j]=a+b+c;
你这极有可能是运算期间,i/j的值被改变了导致的

同意楼上.
在那句下面一句上加个断点,运行到那儿时看看i,j的值越界没.还有那个k.
呵呵呵.

代码里哪句是你上面有问题的啊????

这个问题题意不清,这个程序实在看不懂
#include<iostream>
#define N 6
using namespace std;
int sum(int x,int y,int *b)//函数
{ int i,temp=0;
for(i=x;i<y+1;i++){ //x=2,y=4, 2,3,4
temp=temp+b[i]; //temp=temp+a[1] temp=temp+a[2]
return temp;}
}
/*将一堆堆石子摆放在一个圆形操场周围,
每次合并相邻的两堆石子,
每次合并后得到那堆新的石堆就是当前合并得分,
求所有石堆合并成一堆后的最大得分,
ma[i][j]表示的是将第i堆石子到第j堆石子合并后的最大的分
*/
int main() {
int a[2*N];//12个数的数组
int k,i,j=0,max;
int ma[N*2][2*N]; //二维数组,有144个元素

for(i=0;i<N;i++) { //a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5
cin>>a[i];
a[N+i]=a[i]; //a[6]=0,a[7]=1,a[8]=2,a[9]=3